You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2011/06/26 13:51:10 UTC
svn commit: r1139763 [9/10] - in /incubator/isis/trunk/viewer: json/
json/applib2/ json/applib2/src/ json/applib2/src/main/
json/applib2/src/main/java/ json/applib2/src/main/java/META-INF/
json/applib2/src/main/java/org/ json/applib2/src/main/java/org/...
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/collections/TableColumnOneToManyAssociationInvalidReason.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/collections/TableColumnOneToManyAssociationInvalidReason.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/collections/TableColumnOneToManyAssociationInvalidReason.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/collections/TableColumnOneToManyAssociationInvalidReason.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.resources.objects.collections;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.viewer.restful.viewer.resources.objects.TableColumnNakedObjectMemberInvalidReason;
+import org.apache.isis.viewer.restful.viewer.xom.ResourceContext;
+
+public final class TableColumnOneToManyAssociationInvalidReason extends
+ TableColumnNakedObjectMemberInvalidReason<OneToManyAssociation> {
+
+ public TableColumnOneToManyAssociationInvalidReason(final AuthenticationSession session,
+ final ObjectAdapter nakedObject, final ResourceContext resourceContext) {
+ super(session, nakedObject, resourceContext);
+ }
+
+ @Override
+ protected String getDomId(final OneToManyAssociation member) {
+ return "collection-invalid-" + member.getId();
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/collections/TableColumnOneToManyAssociationName.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/collections/TableColumnOneToManyAssociationName.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/collections/TableColumnOneToManyAssociationName.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/collections/TableColumnOneToManyAssociationName.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.resources.objects.collections;
+
+import java.text.MessageFormat;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.viewer.restful.viewer.html.HtmlClass;
+import org.apache.isis.viewer.restful.viewer.resources.objects.TableColumnNakedObjectMemberName;
+import org.apache.isis.viewer.restful.viewer.tree.Element;
+import org.apache.isis.viewer.restful.viewer.xom.ResourceContext;
+
+public class TableColumnOneToManyAssociationName extends TableColumnNakedObjectMemberName<OneToManyAssociation> {
+
+ public TableColumnOneToManyAssociationName(final ObjectSpecification noSpec, final AuthenticationSession session,
+ final ObjectAdapter nakedObject, final ResourceContext resourceContext) {
+ super(noSpec, session, nakedObject, resourceContext);
+ }
+
+ @Override
+ public Element doTd(final OneToManyAssociation oneToManyAssociation) {
+ final String memberName = oneToManyAssociation.getIdentifier().getMemberName();
+ final String memberType = "collection";
+ final String uri =
+ MessageFormat.format("{0}/specs/{1}/{2}/{3}", getContextPath(), getNoSpec().getFullIdentifier(),
+ memberType, memberName);
+ return new Element(xhtmlRenderer.aHref(uri, oneToManyAssociation.getName(), "propertySpec", memberType,
+ HtmlClass.COLLECTION));
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/collections/TableColumnOneToManyAssociationRemoveFrom.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/collections/TableColumnOneToManyAssociationRemoveFrom.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/collections/TableColumnOneToManyAssociationRemoveFrom.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/collections/TableColumnOneToManyAssociationRemoveFrom.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.resources.objects.collections;
+
+import java.text.MessageFormat;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.viewer.restful.viewer.html.HtmlClass;
+import org.apache.isis.viewer.restful.viewer.resources.objects.TableColumnNakedObjectAssociationModifyAbstract;
+import org.apache.isis.viewer.restful.viewer.util.StringUtil;
+import org.apache.isis.viewer.restful.viewer.xom.ResourceContext;
+
+public final class TableColumnOneToManyAssociationRemoveFrom extends
+ TableColumnNakedObjectAssociationModifyAbstract<OneToManyAssociation> {
+
+ public TableColumnOneToManyAssociationRemoveFrom(final AuthenticationSession session,
+ final ObjectAdapter nakedObject, final ResourceContext resourceContext) {
+ super("RemoveFrom", session, nakedObject, resourceContext);
+ }
+
+ @Override
+ protected String getFormNamePrefix() {
+ return "collection-";
+ }
+
+ @Override
+ protected String getHtmlClassAttribute() {
+ return HtmlClass.COLLECTION;
+ }
+
+ @Override
+ protected String getFormButtonLabel() {
+ return "Remove";
+ }
+
+ /**
+ * Calls the <tt>removeFromCollection()</tt> Javascript function that lives in <tt>isis-rest-support.js</tt>
+ *
+ * @param url
+ * @param associationId
+ * @param inputFieldName
+ * - the name of the field in the form to read the value.
+ * @return
+ */
+ @Override
+ protected String invokeJavascript(final String url, final String associationId, final String inputFieldName) {
+ return MessageFormat.format("removeFromCollection({0}, {1}, {2}.value);", StringUtil.quote(url),
+ StringUtil.quote(associationId), inputFieldName);
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationAccess.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationAccess.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationAccess.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationAccess.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.resources.objects.properties;
+
+import java.text.MessageFormat;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.viewer.restful.viewer.html.HtmlClass;
+import org.apache.isis.viewer.restful.viewer.resources.objects.TableColumnNakedObjectAssociation;
+import org.apache.isis.viewer.restful.viewer.tree.Element;
+import org.apache.isis.viewer.restful.viewer.xom.ResourceContext;
+
+public final class TableColumnOneToOneAssociationAccess extends TableColumnNakedObjectAssociation<OneToOneAssociation> {
+
+ public TableColumnOneToOneAssociationAccess(final AuthenticationSession session, final ObjectAdapter nakedObject,
+ final ResourceContext resourceContext) {
+ super("Access", session, nakedObject, resourceContext);
+ }
+
+ @Override
+ public Element doTd(final OneToOneAssociation property) {
+ if (!property.isVisible(getSession(), getNakedObject()).isAllowed()) {
+ return xhtmlRenderer.p(null, HtmlClass.PROPERTY);
+ }
+
+ final ObjectAdapter propertyValue = property.get(getNakedObject());
+ if (propertyValue == null) {
+ return xhtmlRenderer.p(null, HtmlClass.PROPERTY);
+ }
+
+ ParseableFacet parseable = property.getFacet(ParseableFacet.class);
+ if (parseable == null) {
+ final ObjectSpecification propertySpec = property.getSpecification();
+ parseable = propertySpec.getFacet(ParseableFacet.class);
+ }
+ if (parseable != null) {
+ return doTdForParseable(propertyValue);
+ } else {
+ return doTdForNonParseable(propertyValue);
+ }
+ }
+
+ private Element doTdForParseable(final ObjectAdapter propertyValue) {
+ final String titleString = propertyValue.titleString();
+ return xhtmlRenderer.p(titleString, HtmlClass.PROPERTY);
+ }
+
+ private Element doTdForNonParseable(final ObjectAdapter propertyValue) {
+ final String titleString = propertyValue.titleString();
+ final Oid oid = propertyValue.getOid();
+ if (oid == null) {
+ return xhtmlRenderer.p(null, HtmlClass.PROPERTY);
+ }
+ final String uri = MessageFormat.format("{0}/object/{1}", getContextPath(), getOidStr(propertyValue));
+ return new Element(xhtmlRenderer.aHref(uri, titleString, "propertyValue", "property", HtmlClass.PROPERTY));
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationClear.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationClear.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationClear.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationClear.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.resources.objects.properties;
+
+import java.text.MessageFormat;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.viewer.restful.viewer.html.HtmlClass;
+import org.apache.isis.viewer.restful.viewer.resources.objects.TableColumnNakedObjectAssociationModifyAbstract;
+import org.apache.isis.viewer.restful.viewer.util.StringUtil;
+import org.apache.isis.viewer.restful.viewer.xom.ResourceContext;
+
+public final class TableColumnOneToOneAssociationClear extends
+ TableColumnNakedObjectAssociationModifyAbstract<OneToOneAssociation> {
+
+ public TableColumnOneToOneAssociationClear(final AuthenticationSession session, final ObjectAdapter nakedObject,
+ final ResourceContext resourceContext) {
+ super("Clear", session, nakedObject, resourceContext, false);
+ }
+
+ @Override
+ protected String getFormNamePrefix() {
+ return "property-";
+ }
+
+ @Override
+ protected String getHtmlClassAttribute() {
+ return HtmlClass.PROPERTY;
+ }
+
+ @Override
+ protected String getFormButtonLabel() {
+ return "Clear";
+ }
+
+ /**
+ * Calls the <tt>putProperty()</tt> Javascript function that lives in <tt>isis-rest-support.js</tt>
+ *
+ * @param url
+ * @param associationId
+ * @param inputFieldName
+ * - the name of the field in the form to read the value.
+ * @return
+ */
+ @Override
+ protected String invokeJavascript(final String url, final String associationId, final String inputFieldName) {
+ return MessageFormat.format("clearProperty({0},{1});", StringUtil.quote(url), StringUtil.quote(associationId));
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationInvalidReason.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationInvalidReason.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationInvalidReason.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationInvalidReason.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.resources.objects.properties;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.viewer.restful.viewer.resources.objects.TableColumnNakedObjectMemberInvalidReason;
+import org.apache.isis.viewer.restful.viewer.xom.ResourceContext;
+
+public final class TableColumnOneToOneAssociationInvalidReason extends
+ TableColumnNakedObjectMemberInvalidReason<OneToOneAssociation> {
+
+ public TableColumnOneToOneAssociationInvalidReason(final AuthenticationSession session,
+ final ObjectAdapter nakedObject, final ResourceContext resourceContext) {
+ super(session, nakedObject, resourceContext);
+ }
+
+ @Override
+ protected String getDomId(final OneToOneAssociation member) {
+ return "property-invalid-" + member.getId();
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationModify.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationModify.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationModify.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationModify.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.resources.objects.properties;
+
+import java.text.MessageFormat;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.viewer.restful.viewer.html.HtmlClass;
+import org.apache.isis.viewer.restful.viewer.resources.objects.TableColumnNakedObjectAssociationModifyAbstract;
+import org.apache.isis.viewer.restful.viewer.util.StringUtil;
+import org.apache.isis.viewer.restful.viewer.xom.ResourceContext;
+
+public final class TableColumnOneToOneAssociationModify extends
+ TableColumnNakedObjectAssociationModifyAbstract<OneToOneAssociation> {
+
+ public TableColumnOneToOneAssociationModify(final AuthenticationSession session, final ObjectAdapter nakedObject,
+ final ResourceContext resourceContext) {
+ super("Modify", session, nakedObject, resourceContext);
+ }
+
+ @Override
+ protected String getFormNamePrefix() {
+ return "property-";
+ }
+
+ @Override
+ protected String getHtmlClassAttribute() {
+ return HtmlClass.PROPERTY;
+ }
+
+ @Override
+ protected String getFormButtonLabel() {
+ return "Set";
+ }
+
+ /**
+ * Calls the <tt>putProperty()</tt> Javascript function that lives in <tt>isis-rest-support.js</tt>
+ *
+ * @param url
+ * @param associationId
+ * @param inputFieldName
+ * - the name of the field in the form to read the value.
+ * @return
+ */
+ @Override
+ protected String invokeJavascript(final String url, final String associationId, final String inputFieldName) {
+ return MessageFormat.format("modifyProperty({0},{1},{2}.value);", StringUtil.quote(url),
+ StringUtil.quote(associationId), inputFieldName);
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationName.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationName.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationName.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationName.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.resources.objects.properties;
+
+import java.text.MessageFormat;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.viewer.restful.viewer.html.HtmlClass;
+import org.apache.isis.viewer.restful.viewer.resources.objects.TableColumnNakedObjectMemberName;
+import org.apache.isis.viewer.restful.viewer.tree.Element;
+import org.apache.isis.viewer.restful.viewer.xom.ResourceContext;
+
+public class TableColumnOneToOneAssociationName extends TableColumnNakedObjectMemberName<OneToOneAssociation> {
+
+ public TableColumnOneToOneAssociationName(final ObjectSpecification noSpec, final AuthenticationSession session,
+ final ObjectAdapter nakedObject, final ResourceContext resourceContext) {
+ super(noSpec, session, nakedObject, resourceContext);
+ }
+
+ @Override
+ public Element doTd(final OneToOneAssociation oneToOneAssociation) {
+ final String memberName = oneToOneAssociation.getIdentifier().getMemberName();
+ final String memberType = "property";
+ final String uri =
+ MessageFormat.format("{0}/specs/{1}/{2}/{3}", getContextPath(), getNoSpec().getFullIdentifier(),
+ memberType, memberName);
+ return new Element(xhtmlRenderer.aHref(uri, oneToOneAssociation.getName(), "propertySpec", memberType,
+ HtmlClass.PROPERTY));
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationParseable.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationParseable.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationParseable.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/objects/properties/TableColumnOneToOneAssociationParseable.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.resources.objects.properties;
+
+import org.apache.isis.core.commons.authentication.AuthenticationSession;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.viewer.restful.viewer.html.HtmlClass;
+import org.apache.isis.viewer.restful.viewer.resources.objects.TableColumnNakedObjectAssociation;
+import org.apache.isis.viewer.restful.viewer.tree.Element;
+import org.apache.isis.viewer.restful.viewer.xom.ResourceContext;
+
+public final class TableColumnOneToOneAssociationParseable extends
+ TableColumnNakedObjectAssociation<OneToOneAssociation> {
+
+ public TableColumnOneToOneAssociationParseable(final AuthenticationSession session,
+ final ObjectAdapter nakedObject, final ResourceContext resourceContext) {
+ super("Parseable", session, nakedObject, resourceContext);
+ }
+
+ @Override
+ public Element doTd(final OneToOneAssociation property) {
+ final boolean parseable = property.getFacet(ParseableFacet.class) != null;
+ return xhtmlRenderer.p(parseable, HtmlClass.VISIBLE);
+ }
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/services/ServicesResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/services/ServicesResourceImpl.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/services/ServicesResourceImpl.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/services/ServicesResourceImpl.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.resources.services;
+
+import java.text.MessageFormat;
+import java.util.List;
+
+import javax.ws.rs.Path;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.viewer.restful.applib.resources.ServicesResource;
+import org.apache.isis.viewer.restful.viewer.html.HtmlClass;
+import org.apache.isis.viewer.restful.viewer.html.XhtmlTemplate;
+import org.apache.isis.viewer.restful.viewer.resources.ResourceAbstract;
+import org.apache.isis.viewer.restful.viewer.tree.Element;
+
+/**
+ * Implementation note: it seems to be necessary to annotate the implementation with {@link Path} rather than the
+ * interface (at least under RestEasy 1.0.2 and 1.1-RC2).
+ */
+@Path("/services")
+public class ServicesResourceImpl extends ResourceAbstract implements ServicesResource {
+
+ @Override
+ public String services() {
+ init();
+ final XhtmlTemplate xhtml = new XhtmlTemplate("Services", getServletRequest());
+
+ xhtml.appendToBody(asDivIsisSession());
+ xhtml.appendToBody(resourcesDiv());
+
+ final Element div = xhtmlRenderer.div_p("Services", HtmlClass.SECTION);
+
+ final Element ul = xhtmlRenderer.ul(HtmlClass.SERVICES);
+ final List<ObjectAdapter> serviceAdapters = getPersistenceSession().getServices();
+ for (final ObjectAdapter serviceAdapter : serviceAdapters) {
+ final String uri =
+ MessageFormat.format("{0}/object/{1}", getServletRequest().getContextPath(), getOidStr(serviceAdapter));
+ ul.appendChild(xhtmlRenderer.li_a(uri, serviceAdapter.titleString(), "object", "services",
+ HtmlClass.SERVICE));
+ }
+ div.appendChild(ul);
+
+ xhtml.appendToBody(div);
+
+ return xhtml.toXML();
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/specs/SpecsResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/specs/SpecsResourceImpl.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/specs/SpecsResourceImpl.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/specs/SpecsResourceImpl.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,435 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.resources.specs;
+
+import java.beans.IntrospectionException;
+import java.lang.reflect.InvocationTargetException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.ws.rs.Path;
+import javax.ws.rs.WebApplicationException;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
+import org.apache.isis.viewer.restful.applib.resources.SpecsResource;
+import org.apache.isis.viewer.restful.viewer.html.HtmlClass;
+import org.apache.isis.viewer.restful.viewer.html.XhtmlTemplate;
+import org.apache.isis.viewer.restful.viewer.resources.ResourceAbstract;
+import org.apache.isis.viewer.restful.viewer.tree.Element;
+import org.apache.isis.viewer.restful.viewer.util.ActionUtils;
+
+import com.google.common.collect.Lists;
+
+/**
+ * Implementation note: it seems to be necessary to annotate the implementation with {@link Path} rather than the
+ * interface (at least under RestEasy 1.0.2 and 1.1-RC2).
+ */
+@Path("/specs")
+public class SpecsResourceImpl extends ResourceAbstract implements SpecsResource {
+
+ @Override
+ public String specs() {
+ init();
+
+ final XhtmlTemplate xhtml = new XhtmlTemplate("Specifications", getServletRequest());
+
+ xhtml.appendToBody(asDivIsisSession());
+ xhtml.appendToBody(resourcesDiv());
+
+ final Element div = xhtmlRenderer.div_p("Specifications", HtmlClass.SECTION);
+
+ final Element ul = xhtmlRenderer.ul(HtmlClass.SPECIFICATIONS);
+ final ArrayList<ObjectSpecification> allSpecs =
+ Lists.newArrayList(getSpecificationLoader().allSpecifications());
+ Collections.sort(allSpecs, ObjectSpecification.COMPARATOR_FULLY_QUALIFIED_CLASS_NAME);
+ final List<ObjectSpecification> sorted = allSpecs;
+ for (final ObjectSpecification spec : sorted) {
+ final String specFullName = spec.getFullIdentifier();
+ final String uri =
+ MessageFormat.format("{0}/specs/{1}", getServletRequest().getContextPath(), specFullName);
+ ul.appendChild(xhtmlRenderer.li_a(uri, specFullName, "spec", "specs", HtmlClass.SPECIFICATION));
+ }
+ div.appendChild(ul);
+
+ xhtml.appendToBody(div);
+
+ return xhtml.toXML();
+ }
+
+ private SpecificationLoader getSpecificationLoader() {
+ return IsisContext.getSpecificationLoader();
+ }
+
+ // /////////////////////////////////////////////////////////////////////
+ // spec
+ // /////////////////////////////////////////////////////////////////////
+
+ @Override
+ public String spec(final String specFullName) {
+ init();
+ final XhtmlTemplate xhtml = new XhtmlTemplate(specFullName, getServletRequest());
+ xhtml.appendToBody(asDivIsisSession());
+
+ final ObjectSpecification noSpec = getSpecification(specFullName);
+
+ xhtml.appendToBody(asDivTableFacets(noSpec, noSpec.getFullIdentifier()));
+
+ final Element propertiesDivEl = asDivProperties(noSpec);
+ xhtml.appendToBody(propertiesDivEl);
+
+ final Element collectionsDivEl = asDivCollections(noSpec);
+ xhtml.appendToBody(collectionsDivEl);
+
+ for (final ActionType type : ACTION_TYPES) {
+ final Element actionsDivEl = asDivActions(noSpec, type);
+ xhtml.appendToBody(actionsDivEl);
+ }
+
+ return xhtml.toXML();
+ }
+
+ private Element asDivProperties(final ObjectSpecification noSpec) {
+ final Element div = xhtmlRenderer.div_p("Properties", HtmlClass.PROPERTIES);
+
+ final List<OneToOneAssociation> properties = noSpec.getProperties();
+ final Element ul = xhtmlRenderer.ul(HtmlClass.PROPERTIES);
+ div.appendChild(ul);
+ for (final ObjectAssociation property : properties) {
+ final String propertyId = property.getIdentifier().getMemberName();
+ final String path =
+ MessageFormat.format("{0}/specs/{1}/property/{2}", getServletRequest().getContextPath(),
+ noSpec.getFullIdentifier(), propertyId);
+ final Element li = xhtmlRenderer.li_a(path, propertyId, "property", "spec", HtmlClass.PROPERTY);
+ ul.appendChild(li);
+ }
+ return div;
+ }
+
+ private Element asDivCollections(final ObjectSpecification noSpec) {
+ final Element div = xhtmlRenderer.div_p("Collections", HtmlClass.COLLECTIONS);
+
+ final List<OneToManyAssociation> collections = noSpec.getCollections();
+ final Element ul = xhtmlRenderer.ul(HtmlClass.COLLECTIONS);
+ div.appendChild(ul);
+ for (final ObjectAssociation collection : collections) {
+ final String collectionId = collection.getIdentifier().getMemberName();
+ final String path =
+ MessageFormat.format("{0}/specs/{1}/collection/{2}", getServletRequest().getContextPath(),
+ noSpec.getFullIdentifier(), collectionId);
+ final Element li = xhtmlRenderer.li_a(path, collectionId, "collection", "spec", HtmlClass.COLLECTION);
+ ul.appendChild(li);
+ }
+ return div;
+ }
+
+ private Element asDivActions(final ObjectSpecification noSpec, final ActionType type) {
+ final Element div = xhtmlRenderer.div_p(type.name() + " actions", HtmlClass.ACTIONS);
+
+ final List<ObjectAction> actions = ActionUtils.flattened(noSpec.getObjectActions(type));
+ final Element ul = xhtmlRenderer.ul(HtmlClass.ACTIONS);
+ div.appendChild(ul);
+ for (final ObjectAction action : actions) {
+ final Identifier actionIdentifier = action.getIdentifier();
+ final String actionId = actionIdentifier.toNameParmsIdentityString();
+ final String noSpecFullName = noSpec.getFullIdentifier();
+ final String uri =
+ MessageFormat.format("{0}/specs/{1}/action/{2}", getServletRequest().getContextPath(), noSpecFullName,
+ actionId);
+ final Element li = xhtmlRenderer.li_a(uri, actionId, "action", "spec", HtmlClass.ACTION);
+ ul.appendChild(li);
+ }
+ return div;
+ }
+
+ // /////////////////////////////////////////////////////////////////////
+ // specFacet
+ // /////////////////////////////////////////////////////////////////////
+
+ @Override
+ public String specFacet(final String specFullName, final String facetTypeName) {
+ init();
+
+ final String specAndFacet = specFullName + "/facet/" + facetTypeName;
+ final XhtmlTemplate xhtml = new XhtmlTemplate(specAndFacet, getServletRequest());
+ xhtml.appendToBody(asDivIsisSession());
+
+ final ObjectSpecification noSpec = getSpecification(specFullName);
+
+ final String uri = MessageFormat.format("{0}/specs/{1}", getServletRequest().getContextPath(), specFullName);
+ xhtml.appendToBody(xhtmlRenderer.aHref(uri, "owning spec", "spec", "facet", HtmlClass.SPECIFICATION));
+
+ try {
+ xhtml.appendToBody(divFacetElements(facetTypeName, noSpec));
+ } catch (final IllegalArgumentException e) {
+ throw new WebApplicationException(responseOfNotFound(e));
+ } catch (final ClassNotFoundException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ } catch (final IntrospectionException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ } catch (final IllegalAccessException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ } catch (final InvocationTargetException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ }
+
+ return xhtml.toXML();
+ }
+
+ // /////////////////////////////////////////////////////////////////////
+ // specProperty
+ // /////////////////////////////////////////////////////////////////////
+
+ @Override
+ public String specProperty(final String specFullName, final String propertyName) {
+ init();
+
+ final String specAndProperty = specFullName + "/property/" + propertyName;
+ final XhtmlTemplate xhtml = new XhtmlTemplate(specAndProperty, getServletRequest());
+ xhtml.appendToBody(asDivIsisSession());
+
+ // owners
+ final Element div = xhtmlRenderer.div_p("Owners", null);
+ xhtml.appendToBody(div);
+ final Element ul = xhtmlRenderer.ul(HtmlClass.SPECIFICATION);
+
+ final String uri = MessageFormat.format("{0}/specs/{1}", getServletRequest().getContextPath(), specFullName);
+ ul.appendChild(xhtmlRenderer.aHref(uri, "owning spec", "spec", "property", HtmlClass.SPECIFICATION));
+
+ div.appendChild(ul);
+
+ final ObjectSpecification noSpec = getSpecification(specFullName);
+ final ObjectAssociation property = noSpec.getAssociation(propertyName);
+
+ xhtml.appendToBody(asDivTableFacets(property, propertyName));
+
+ return xhtml.toXML();
+ }
+
+ // /////////////////////////////////////////////////////////////////////
+ // specCollection
+ // /////////////////////////////////////////////////////////////////////
+
+ @Override
+ public String specCollection(final String specFullName, final String collectionName) {
+ init();
+
+ final String specAndCollection = specFullName + "/collection/" + collectionName;
+ final XhtmlTemplate xhtml = new XhtmlTemplate(specAndCollection, getServletRequest());
+ xhtml.appendToBody(asDivIsisSession());
+
+ // owners
+ final Element div = xhtmlRenderer.div_p("Owners", null);
+ xhtml.appendToBody(div);
+ final Element ul = xhtmlRenderer.ul(HtmlClass.SPECIFICATION);
+
+ final String uri = MessageFormat.format("{0}/specs/{1}", getServletRequest().getContextPath(), specFullName);
+ ul.appendChild(xhtmlRenderer.aHref(uri, "owning spec", "spec", "collection", HtmlClass.SPECIFICATION));
+
+ div.appendChild(ul);
+
+ final ObjectSpecification noSpec = getSpecification(specFullName);
+ final ObjectAssociation collection = noSpec.getAssociation(collectionName);
+
+ xhtml.appendToBody(asDivTableFacets(collection, collectionName));
+
+ return xhtml.toXML();
+ }
+
+ // /////////////////////////////////////////////////////////////////////
+ // specAction
+ // /////////////////////////////////////////////////////////////////////
+
+ @Override
+ public String specAction(final String specFullName, final String actionId) {
+ init();
+
+ final String specAndAction = specFullName + "/action/" + actionId;
+ final XhtmlTemplate xhtml = new XhtmlTemplate(specAndAction, getServletRequest());
+ xhtml.appendToBody(asDivIsisSession());
+
+ // owners
+ final Element div = xhtmlRenderer.div_p("Owners", null);
+ xhtml.appendToBody(div);
+ final Element ul = xhtmlRenderer.ul(HtmlClass.SPECIFICATION);
+
+ final String specUri =
+ MessageFormat.format("{0}/specs/{1}", getServletRequest().getContextPath(), specFullName);
+ ul.appendChild(xhtmlRenderer.li_a(specUri, specFullName, "owning spec", "spec", HtmlClass.SPECIFICATION));
+
+ div.appendChild(ul);
+
+ final ObjectSpecification noSpec = getSpecification(specFullName);
+ final ObjectAction action = noSpec.getObjectAction(null, actionId);
+
+ xhtml.appendToBody(asDivTableFacets(action, actionId));
+
+ return xhtml.toXML();
+ }
+
+ // /////////////////////////////////////////////////////////////////////
+ // specPropertyFacet
+ // /////////////////////////////////////////////////////////////////////
+
+ @Override
+ public String specPropertyFacet(final String specFullName, final String propertyName, final String facetTypeName) {
+ init();
+
+ final String specAndPropertyAndFacet = specFullName + "/property/" + propertyName + "/facet/" + facetTypeName;
+ final XhtmlTemplate xhtml = new XhtmlTemplate(specAndPropertyAndFacet, getServletRequest());
+ xhtml.appendToBody(asDivIsisSession());
+
+ final ObjectSpecification noSpec = getSpecification(specFullName);
+ final ObjectAssociation property = noSpec.getAssociation(propertyName);
+
+ // owners
+ final Element div = xhtmlRenderer.div_p("Owners", null);
+ xhtml.appendToBody(div);
+ final Element ul = xhtmlRenderer.ul(HtmlClass.PROPERTIES);
+
+ final String specUri =
+ MessageFormat.format("{0}/specs/{1}", getServletRequest().getContextPath(), specFullName);
+ ul.appendChild(xhtmlRenderer.li_a(specUri, specFullName, "owning spec", "spec", "facet"));
+
+ final String propertyUri =
+ MessageFormat.format("{0}/specs/{1}/property/{2}", getServletRequest().getContextPath(), specFullName,
+ propertyName);
+ ul.appendChild(xhtmlRenderer.li_a(propertyUri, propertyName, "owning property", "property", "facet"));
+
+ div.appendChild(ul);
+
+ try {
+ xhtml.appendToBody(divFacetElements(facetTypeName, property));
+ } catch (final IllegalArgumentException e) {
+ throw new WebApplicationException(responseOfNotFound(e));
+ } catch (final ClassNotFoundException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ } catch (final IntrospectionException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ } catch (final IllegalAccessException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ } catch (final InvocationTargetException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ }
+
+ return xhtml.toXML();
+ }
+
+ // /////////////////////////////////////////////////////////////////////
+ // specCollectionFacet
+ // /////////////////////////////////////////////////////////////////////
+
+ @Override
+ public String specCollectionFacet(final String specFullName, final String collectionId, final String facetTypeName) {
+ init();
+
+ final String specAndPropertyAndFacet = specFullName + "/collection/" + collectionId + "/facet/" + facetTypeName;
+ final XhtmlTemplate xhtml = new XhtmlTemplate(specAndPropertyAndFacet, getServletRequest());
+ xhtml.appendToBody(asDivIsisSession());
+
+ final ObjectSpecification noSpec = getSpecification(specFullName);
+ final ObjectAssociation collection = noSpec.getAssociation(collectionId);
+
+ // owners
+ final Element div = xhtmlRenderer.div_p("Owners", null);
+ xhtml.appendToBody(div);
+ final Element ul = xhtmlRenderer.ul(HtmlClass.PROPERTIES);
+
+ final String specUri =
+ MessageFormat.format("{0}/specs/{1}", getServletRequest().getContextPath(), specFullName);
+ ul.appendChild(xhtmlRenderer.li_a(specUri, specFullName, "owning spec", "spec", "facet"));
+
+ final String collectionUri =
+ MessageFormat.format("{0}/specs/{1}/collection/{2}", getServletRequest().getContextPath(), specFullName,
+ collectionId);
+ ul.appendChild(xhtmlRenderer.li_a(collectionUri, collectionId, "owning collection", "collection", "facet"));
+ div.appendChild(ul);
+
+ try {
+ xhtml.appendToBody(divFacetElements(facetTypeName, collection));
+ } catch (final IllegalArgumentException e) {
+ throw new WebApplicationException(responseOfNotFound(e));
+ } catch (final ClassNotFoundException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ } catch (final IntrospectionException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ } catch (final IllegalAccessException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ } catch (final InvocationTargetException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ }
+
+ return xhtml.toXML();
+ }
+
+ // /////////////////////////////////////////////////////////////////////
+ // specActionFacet
+ // /////////////////////////////////////////////////////////////////////
+
+ @Override
+ public String specActionFacet(final String specFullName, final String actionId, final String facetTypeName) {
+ init();
+
+ final String specAndPropertyAndFacet = specFullName + "/action/" + actionId + "/facet/" + facetTypeName;
+ final XhtmlTemplate xhtml = new XhtmlTemplate(specAndPropertyAndFacet, getServletRequest());
+ xhtml.appendToBody(asDivIsisSession());
+
+ final ObjectSpecification noSpec = getSpecification(specFullName);
+ final ObjectAction action = noSpec.getObjectAction(null, actionId);
+
+ // owners
+ final Element div = xhtmlRenderer.div_p("Owners", null);
+ xhtml.appendToBody(div);
+ final Element ul = xhtmlRenderer.ul(HtmlClass.PROPERTIES);
+ final String specUri =
+ MessageFormat.format("{0}/specs/{1}", getServletRequest().getContextPath(), specFullName);
+ ul.appendChild(xhtmlRenderer.li_a(specUri, specFullName, "owning spec", "spec", "facet"));
+ final String actionUri =
+ MessageFormat.format("{0}/specs/{1}/action/{2}", getServletRequest().getContextPath(), specFullName,
+ actionId);
+ ul.appendChild(xhtmlRenderer.li_a(actionUri, actionId, "owning action", "collection", "facet"));
+ div.appendChild(ul);
+
+ try {
+ xhtml.appendToBody(divFacetElements(facetTypeName, action));
+ } catch (final IllegalArgumentException e) {
+ throw new WebApplicationException(responseOfNotFound(e));
+ } catch (final ClassNotFoundException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ } catch (final IntrospectionException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ } catch (final IllegalAccessException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ } catch (final InvocationTargetException e) {
+ throw new WebApplicationException(responseOfInternalServerError(e));
+ }
+
+ return xhtml.toXML();
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/user/UserResourceImpl.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/user/UserResourceImpl.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/user/UserResourceImpl.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/resources/user/UserResourceImpl.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.resources.user;
+
+import java.util.List;
+
+import javax.ws.rs.Path;
+
+import org.apache.isis.viewer.restful.applib.resources.UserResource;
+import org.apache.isis.viewer.restful.viewer.html.HtmlClass;
+import org.apache.isis.viewer.restful.viewer.html.XhtmlTemplate;
+import org.apache.isis.viewer.restful.viewer.resources.ResourceAbstract;
+import org.apache.isis.viewer.restful.viewer.tree.Element;
+
+/**
+ * Implementation note: it seems to be necessary to annotate the implementation with {@link Path} rather than the
+ * interface (at least under RestEasy 1.0.2 and 1.1-RC2).
+ */
+@Path("/user")
+public class UserResourceImpl extends ResourceAbstract implements UserResource {
+
+ @Override
+ public String user() {
+ init();
+
+ final XhtmlTemplate xhtml = new XhtmlTemplate("User", getServletRequest());
+ xhtml.appendToBody(asDivIsisSession());
+ xhtml.appendToBody(resourcesDiv());
+
+ final Element div = xhtmlRenderer.div_p("Roles", HtmlClass.SECTION);
+
+ final Element ul = xhtmlRenderer.ul(HtmlClass.ROLES);
+ final List<String> roles = getSession().getRoles();
+ for (final String role : roles) {
+ ul.appendChild(xhtmlRenderer.li_p(role, HtmlClass.ROLE));
+ }
+ div.appendChild(ul);
+
+ xhtml.appendToBody(div);
+
+ return xhtml.toXML();
+ }
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/tree/Attribute.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/tree/Attribute.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/tree/Attribute.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/tree/Attribute.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,28 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.tree;
+
+public class Attribute {
+
+ final org.jdom.Attribute xmlAttribute;
+
+ public Attribute(String name, String value) {
+ this.xmlAttribute = new org.jdom.Attribute(name, value);
+ }
+
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/tree/Element.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/tree/Element.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/tree/Element.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/tree/Element.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,46 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.tree;
+
+public class Element {
+
+ public final org.jdom.Element xmlElement;
+
+ public Element(String name) {
+ this.xmlElement = new org.jdom.Element(name);
+ }
+
+ public Element(Element aHref) {
+ this.xmlElement = (org.jdom.Element) aHref.xmlElement.clone();
+ }
+
+ public void appendChild(String headerText) {
+ xmlElement.addContent(headerText);
+ }
+
+ public void appendChild(Element element) {
+ xmlElement.addContent(element.xmlElement);
+ }
+
+ /**
+ * @param attribute
+ */
+ public void addAttribute(Attribute attribute) {
+ this.xmlElement.setAttribute(attribute.xmlAttribute);
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/ActionUtils.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/ActionUtils.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/ActionUtils.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/ActionUtils.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.util;
+
+import java.util.List;
+
+import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.ObjectActionSet;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+
+import com.google.inject.internal.Lists;
+
+public final class ActionUtils {
+
+ private ActionUtils() {
+ }
+
+ public static List<ObjectAction> flattened(final List<ObjectAction> objectActions) {
+ final List<ObjectAction> actions = Lists.newArrayList();
+ for (final ObjectAction action : objectActions) {
+ if (action.getType() == ActionType.SET) {
+ final ObjectActionSet actionSet = (ObjectActionSet) action;
+ final List<ObjectAction> subActions = actionSet.getActions();
+ for (final ObjectAction subAction : subActions) {
+ actions.add(subAction);
+ }
+ } else {
+ actions.add(action);
+ }
+ }
+ return actions;
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/InputStreamUtil.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/InputStreamUtil.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/InputStreamUtil.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/InputStreamUtil.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.util;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+public final class InputStreamUtil {
+
+ private InputStreamUtil() {
+ }
+
+ public static List<String> getArgs(final InputStream body) {
+ // will be sorted by arg
+ final Map<String, String> args = new TreeMap<String, String>();
+ if (body == null) {
+ return listOfValues(args);
+ }
+ try {
+ final InputStreamReader inputStreamReader = new InputStreamReader(body);
+ final BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
+ String readLine = bufferedReader.readLine();
+ while (readLine != null) {
+ final String[] keyValuePairs = readLine.split("&");
+ for (final String keyValuePair : keyValuePairs) {
+ final String[] keyThenValue = keyValuePair.split("=");
+ args.put(keyThenValue[0], keyThenValue[1]);
+ }
+ readLine = bufferedReader.readLine();
+ }
+ return listOfValues(args);
+ } catch (final IOException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+
+ private static ArrayList<String> listOfValues(final Map<String, String> args) {
+ // returns the values in the order of the keys
+ return new ArrayList<String>(args.values());
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/ListUtils.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/ListUtils.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/ListUtils.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/ListUtils.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.util;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public final class ListUtils {
+
+ private ListUtils() {
+ }
+
+ @SuppressWarnings("unchecked")
+ public static <T> List<T> toList(final Object[] objects) {
+ final List<T> list = new ArrayList<T>();
+ for (final Object o : objects) {
+ list.add((T) o);
+ }
+ return list;
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/OidUtils.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/OidUtils.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/OidUtils.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/OidUtils.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.util;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.oid.stringable.OidStringifier;
+import org.apache.isis.runtimes.dflt.runtime.system.context.IsisContext;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.AdapterManager;
+import org.apache.isis.runtimes.dflt.runtime.system.persistence.PersistenceSession;
+
+public final class OidUtils {
+
+ private OidUtils() {
+ }
+
+ public static ObjectAdapter getNakedObject(final String oidEncodedStr, final OidStringifier oidStringifier) {
+ final String oidStr = UrlDecoderUtils.urlDecode(oidEncodedStr);
+ final Oid oid = oidStringifier.deString(oidStr);
+ return getAdapterManager().getAdapterFor(oid);
+ }
+
+ public static String getOidStr(final ObjectAdapter nakedObject, final OidStringifier oidStringifier) {
+ final Oid oid = nakedObject.getOid();
+ return oid != null ? oidStringifier.enString(oid) : null;
+ }
+
+ // //////////////////////////////////////////////////////////////
+ // Dependencies (from singletons)
+ // //////////////////////////////////////////////////////////////
+
+ public static AdapterManager getAdapterManager() {
+ return getPersistenceSession().getAdapterManager();
+ }
+
+ protected static PersistenceSession getPersistenceSession() {
+ return IsisContext.getPersistenceSession();
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/PathUtils.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/PathUtils.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/PathUtils.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/PathUtils.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.util;
+
+import javax.servlet.http.HttpServletRequest;
+
+public final class PathUtils {
+
+ private PathUtils() {
+ }
+
+ public static String combine(final HttpServletRequest request, final String... pathElements) {
+ final StringBuilder buf = new StringBuilder(request.getContextPath());
+ for (final String pathElement : pathElements) {
+ if (!pathElement.startsWith("/")) {
+ buf.append("/");
+ }
+ buf.append(pathElement);
+ }
+ return buf.toString();
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/StringUtil.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/StringUtil.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/StringUtil.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/StringUtil.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.util;
+
+public final class StringUtil {
+
+ private StringUtil() {
+ }
+
+ public static String concat(final String... lines) {
+ final StringBuilder buf = new StringBuilder();
+ for (final String line : lines) {
+ buf.append(line);
+ }
+ return buf.toString();
+ }
+
+ public static String quote(final String val) {
+ return "\"" + val + "\"";
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/UrlDecoderUtils.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/UrlDecoderUtils.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/UrlDecoderUtils.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/util/UrlDecoderUtils.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.util;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+
+import javax.ws.rs.WebApplicationException;
+
+import org.apache.isis.viewer.restful.viewer.Constants;
+
+public final class UrlDecoderUtils {
+
+ private UrlDecoderUtils() {
+ }
+
+ public static String urlDecode(final String oidStr) {
+ try {
+ return URLDecoder.decode(oidStr, Constants.URL_ENCODING_CHAR_SET);
+ } catch (final UnsupportedEncodingException e) {
+ throw new WebApplicationException(e);
+ }
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/DtDd.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/DtDd.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/DtDd.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/DtDd.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/**
+ *
+ */
+package org.apache.isis.viewer.restful.viewer.xom;
+
+import org.apache.isis.viewer.restful.viewer.tree.Element;
+
+public class DtDd {
+ final Element dt;
+ final Element dd;
+
+ DtDd(final Element dt, final Element dd) {
+ this.dt = dt;
+ this.dd = dd;
+ }
+
+ public void appendTo(final Element dl) {
+ dl.appendChild(dt);
+ dl.appendChild(dd);
+ }
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/ElementBuilder.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/ElementBuilder.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/ElementBuilder.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/ElementBuilder.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.xom;
+
+import org.apache.isis.viewer.restful.viewer.tree.Attribute;
+import org.apache.isis.viewer.restful.viewer.tree.Element;
+
+public class ElementBuilder {
+
+ /**
+ * The element being built.
+ */
+ private Element element;
+
+ public ElementBuilder(final String name) {
+ el(name);
+ }
+
+ /**
+ * Creates an uninitialized builder.
+ *
+ * <p>
+ * Must be followed by a call to {@link #el(String)}.
+ */
+ public ElementBuilder() {
+ }
+
+ public ElementBuilder el(final String name) {
+ assertNotInitialized();
+ this.element = new Element(name);
+ return this;
+ }
+
+ public ElementBuilder attr(final String name, final String value) {
+ assertInitialized();
+ element.addAttribute(new Attribute(name, value));
+ return this;
+ }
+
+ public ElementBuilder classAttr(final String htmlClassAttribute) {
+ if (htmlClassAttribute != null) {
+ element.addAttribute(new Attribute("class", htmlClassAttribute));
+ }
+ return this;
+ }
+
+ public ElementBuilder idAttr(final String idAttribute) {
+ if (idAttribute != null) {
+ element.addAttribute(new Attribute("id", idAttribute));
+ }
+ return this;
+ }
+
+ public ElementBuilder append(final String childText) {
+ if (childText != null) {
+ element.appendChild(childText);
+ }
+ return this;
+ }
+
+ public Element build() {
+ return element;
+ }
+
+ private void assertInitialized() {
+ if (element == null) {
+ throw new IllegalStateException("Element name not specified");
+ }
+ }
+
+ private void assertNotInitialized() {
+ if (element != null) {
+ throw new IllegalStateException("Element already specified");
+ }
+ }
+
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/ResourceContext.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/ResourceContext.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/ResourceContext.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/ResourceContext.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.viewer.restful.viewer.xom;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Request;
+import javax.ws.rs.core.SecurityContext;
+import javax.ws.rs.core.UriInfo;
+
+public class ResourceContext {
+
+ private final HttpServletRequest httpServletRequest;
+
+ private final HttpServletResponse httpServletResponse;
+
+ private final Request request;
+
+ private final HttpHeaders httpHeaders;
+
+ private final UriInfo uriInfo;
+
+ private final SecurityContext securityContext;
+
+ public ResourceContext(final HttpHeaders httpHeaders, final UriInfo uriInfo, final Request request,
+ final HttpServletRequest httpServletRequest, final HttpServletResponse httpServletResponse,
+ final SecurityContext securityContext) {
+ this.httpHeaders = httpHeaders;
+ this.uriInfo = uriInfo;
+ this.request = request;
+ this.httpServletRequest = httpServletRequest;
+ this.httpServletResponse = httpServletResponse;
+ this.securityContext = securityContext;
+ }
+
+ public HttpHeaders getHttpHeaders() {
+ return httpHeaders;
+ }
+
+ public UriInfo getUriInfo() {
+ return uriInfo;
+ }
+
+ public Request getRequest() {
+ return request;
+ }
+
+ public HttpServletRequest getHttpServletRequest() {
+ return httpServletRequest;
+ }
+
+ public HttpServletResponse getServletResponse() {
+ return httpServletResponse;
+ }
+
+ public SecurityContext getSecurityContext() {
+ return securityContext;
+ }
+}
Added: incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/TableColumn.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/TableColumn.java?rev=1139763&view=auto
==============================================================================
--- incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/TableColumn.java (added)
+++ incubator/isis/trunk/viewer/xhtml/viewer/src/main/java/org/apache/isis/viewer/restful/viewer/xom/TableColumn.java Sun Jun 26 11:51:01 2011
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/**
+ *
+ */
+package org.apache.isis.viewer.restful.viewer.xom;
+
+import org.apache.isis.viewer.restful.viewer.tree.Element;
+
+public interface TableColumn<T> {
+
+ public String getHeaderText();
+
+ public Element th();
+
+ public Element td(T t);
+
+}