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/10/12 08:45:02 UTC
svn commit: r1182226 [1/2] - in /incubator/isis/trunk/framework:
applib/src/main/java/org/apache/isis/applib/annotation/
core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/stable/
core/progmodel/src/main/java/org/apache/isis/core...
Author: danhaywood
Date: Wed Oct 12 06:45:00 2011
New Revision: 1182226
URL: http://svn.apache.org/viewvc?rev=1182226&view=rev
Log:
ISIS-109, ISIS-124: more on the json-viewer; also added @Stable annotation in order to support application-defined media types
Added:
incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Stable.java
incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/stable/
incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/stable/StableFacet.java
incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/stable/StableFacetAbstract.java
incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/stable/
incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/stable/annotation/
incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/stable/annotation/StableAnnotationFacetFactory.java
incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/stable/annotation/StableFacetAnnotation.java
incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/stable/
incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/stable/StableAnnotationFacetFactoryTest.java
incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/stables/
incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/stables/StableEntity.java
incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/stables/StableEntityRepository.java
incubator/isis/trunk/framework/tck/tck-fixture/src/main/java/org/apache/isis/tck/fixture/stables/
incubator/isis/trunk/framework/tck/tck-fixture/src/main/java/org/apache/isis/tck/fixture/stables/StableEntityFixture.java
incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/stables/
incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/stables/StableEntityRepositoryDefault.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/UrlDecodeUtils.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java
- copied, changed from r1178710, incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/DomainServiceResourceTest_invokeAction.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_accept.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_representationAndHeaders.java
- copied, changed from r1178710, incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/DomainServiceResourceTest_services.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_xrofollowlinks.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/services/
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_accept.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java
- copied, changed from r1178710, incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkFollower.java
- copied, changed from r1179434, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/PathFollower.java
Removed:
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/DomainServiceResourceTest_invokeAction.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/DomainServiceResourceTest_services.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/PathFollower.java
Modified:
incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
incubator/isis/trunk/framework/viewer/dnd-tck/src/main/resources/isis.properties
incubator/isis/trunk/framework/viewer/html-tck/src/main/webapp/WEB-INF/isis.properties
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulRequest.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/JsonMapper.java
incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RestfulRequestQueryParameterTest_valueOf.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/main/webapp/WEB-INF/isis.properties
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java
incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_xrofollowlinks.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RendererFactory.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/AbstractObjectMemberReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/DomainObjectReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ListReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectActionReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectCollectionReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ObjectPropertyReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domainobjects/ScalarValueReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/AbstractTypeFeatureReprBuilder.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypeReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/DomainTypesReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionParamReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeActionReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypeCollectionReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/domaintypes/TypePropertyReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/home/HomePageReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/user/UserReprRenderer.java
incubator/isis/trunk/framework/viewer/json/json-viewer/src/test/java/org/apache/isis/viewer/json/viewer/representations/PathFollowerTest_asGraph.java
incubator/isis/trunk/framework/viewer/scimpi/scimpi-tck/src/main/webapp/WEB-INF/isis.properties
incubator/isis/trunk/framework/viewer/wicket/wicket-tck/src/main/webapp/WEB-INF/isis.properties
incubator/isis/trunk/framework/viewer/xhtml/xhtml-tck/src/main/webapp/WEB-INF/isis.properties
Added: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Stable.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Stable.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Stable.java (added)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Stable.java Wed Oct 12 06:45:00 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.applib.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Indicates that an entity's definition is stable,
+ * such that any changes to its structure will be
+ * backwardly compatible.
+ *
+ * <p>
+ * Originally introduced to support the json-viewer's
+ * RESTful support for application-defined mime types.
+ */
+@Inherited
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Stable {
+}
Added: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/stable/StableFacet.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/stable/StableFacet.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/stable/StableFacet.java (added)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/stable/StableFacet.java Wed Oct 12 06:45:00 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.core.metamodel.facets.object.stable;
+
+import org.apache.isis.core.metamodel.facets.MarkerFacet;
+
+/**
+ * Indicates that this class is stable, that is, any changes to its structure
+ * will be backwards compatible.
+ *
+ * <p>
+ * In the standard Apache Isis Programming Model, typically corresponds to applying the <tt>@Stable</tt> annotation
+ * at the class level.
+ */
+public interface StableFacet extends MarkerFacet {
+
+}
Added: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/stable/StableFacetAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/stable/StableFacetAbstract.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/stable/StableFacetAbstract.java (added)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/stable/StableFacetAbstract.java Wed Oct 12 06:45:00 2011
@@ -0,0 +1,36 @@
+/*
+ * 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.core.metamodel.facets.object.stable;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.MarkerFacetAbstract;
+
+public abstract class StableFacetAbstract extends MarkerFacetAbstract implements StableFacet {
+
+ public static Class<? extends Facet> type() {
+ return StableFacet.class;
+ }
+
+ public StableFacetAbstract(final FacetHolder holder) {
+ super(type(), holder);
+ }
+
+}
Added: incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/stable/annotation/StableAnnotationFacetFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/stable/annotation/StableAnnotationFacetFactory.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/stable/annotation/StableAnnotationFacetFactory.java (added)
+++ incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/stable/annotation/StableAnnotationFacetFactory.java Wed Oct 12 06:45:00 2011
@@ -0,0 +1,45 @@
+/*
+ * 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.core.progmodel.facets.object.stable.annotation;
+
+import org.apache.isis.applib.annotation.Stable;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.AnnotationBasedFacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.object.stable.StableFacet;
+
+public class StableAnnotationFacetFactory extends AnnotationBasedFacetFactoryAbstract {
+
+ public StableAnnotationFacetFactory() {
+ super(FeatureType.OBJECTS_ONLY);
+ }
+
+ @Override
+ public void process(final ProcessClassContext processClassContaxt) {
+ final Stable annotation = getAnnotation(processClassContaxt.getCls(), Stable.class);
+ FacetUtil.addFacet(create(annotation, processClassContaxt.getFacetHolder()));
+ }
+
+ private StableFacet create(final Stable annotation, final FacetHolder holder) {
+ return annotation == null ? null : new StableFacetAnnotation(holder);
+ }
+
+}
Added: incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/stable/annotation/StableFacetAnnotation.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/stable/annotation/StableFacetAnnotation.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/stable/annotation/StableFacetAnnotation.java (added)
+++ incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/stable/annotation/StableFacetAnnotation.java Wed Oct 12 06:45:00 2011
@@ -0,0 +1,31 @@
+/*
+ * 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.core.progmodel.facets.object.stable.annotation;
+
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.object.stable.StableFacetAbstract;
+
+public class StableFacetAnnotation extends StableFacetAbstract {
+
+ public StableFacetAnnotation(final FacetHolder holder) {
+ super(holder);
+ }
+
+}
Added: incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/stable/StableAnnotationFacetFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/stable/StableAnnotationFacetFactoryTest.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/stable/StableAnnotationFacetFactoryTest.java (added)
+++ incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/stable/StableAnnotationFacetFactoryTest.java Wed Oct 12 06:45:00 2011
@@ -0,0 +1,62 @@
+/*
+ * 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.core.progmodel.facets.object.stable;
+
+import org.apache.isis.applib.annotation.Stable;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facets.FacetFactory.ProcessClassContext;
+import org.apache.isis.core.metamodel.facets.object.stable.StableFacet;
+import org.apache.isis.core.progmodel.facets.AbstractFacetFactoryTest;
+import org.apache.isis.core.progmodel.facets.object.stable.annotation.StableAnnotationFacetFactory;
+import org.apache.isis.core.progmodel.facets.object.stable.annotation.StableFacetAnnotation;
+
+public class StableAnnotationFacetFactoryTest extends AbstractFacetFactoryTest {
+
+ private StableAnnotationFacetFactory facetFactory;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ facetFactory = new StableAnnotationFacetFactory();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ facetFactory = null;
+ super.tearDown();
+ }
+
+ public void testStableAnnotationPickedUpOnClassAndDefaultsToAlways() {
+ @Stable
+ class Customer {}
+
+ facetFactory.process(new ProcessClassContext(Customer.class, methodRemover, facetedMethod));
+
+ final Facet facet = facetedMethod.getFacet(StableFacet.class);
+ assertNotNull(facet);
+ assertTrue(facet instanceof StableFacetAnnotation);
+
+ assertNoMethodsRemoved();
+ }
+
+}
+
Modified: incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java (original)
+++ incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java Wed Oct 12 06:45:00 2011
@@ -97,6 +97,7 @@ import org.apache.isis.core.progmodel.fa
import org.apache.isis.core.progmodel.facets.object.plural.annotation.PluralAnnotationFacetFactory;
import org.apache.isis.core.progmodel.facets.object.plural.staticmethod.PluralMethodFacetFactory;
import org.apache.isis.core.progmodel.facets.object.regex.annotation.RegExFacetAnnotationForTypeFacetFactory;
+import org.apache.isis.core.progmodel.facets.object.stable.annotation.StableAnnotationFacetFactory;
import org.apache.isis.core.progmodel.facets.object.title.TitleMethodFacetFactory;
import org.apache.isis.core.progmodel.facets.object.typicallen.annotation.TypicalLengthAnnotationOnTypeFacetFactory;
import org.apache.isis.core.progmodel.facets.object.validate.method.ValidateObjectViaValidateMethodFacetFactory;
@@ -286,6 +287,8 @@ public class ProgrammingModelFacetsJava5
addFactory(ImmutableMarkerInterfacesFacetFactory.class);
+ addFactory(StableAnnotationFacetFactory.class);
+
addFactory(MaxLengthAnnotationForTypeFacetFactory.class);
addFactory(MaxLengthAnnotationForPropertyFacetFactory.class);
addFactory(MaxLengthAnnotationForParameterFacetFactory.class);
Added: incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/stables/StableEntity.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/stables/StableEntity.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/stables/StableEntity.java (added)
+++ incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/stables/StableEntity.java Wed Oct 12 06:45:00 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.tck.dom.stables;
+
+import org.apache.isis.applib.AbstractDomainObject;
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Stable;
+
+@Stable
+public class StableEntity extends AbstractDomainObject {
+
+ // {{ Name
+ private String name;
+
+ @MemberOrder(sequence = "1")
+ public String getName() {
+ return name;
+ }
+
+ public void setName(final String name) {
+ this.name = name;
+ }
+ // }}
+
+
+}
Added: incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/stables/StableEntityRepository.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/stables/StableEntityRepository.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/stables/StableEntityRepository.java (added)
+++ incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/stables/StableEntityRepository.java Wed Oct 12 06:45:00 2011
@@ -0,0 +1,45 @@
+/*
+ * 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.tck.dom.stables;
+
+import java.util.List;
+
+import org.apache.isis.applib.annotation.Idempotent;
+import org.apache.isis.applib.annotation.MemberOrder;
+import org.apache.isis.applib.annotation.Named;
+import org.apache.isis.applib.annotation.QueryOnly;
+
+@Named("Stables")
+public interface StableEntityRepository {
+
+ @QueryOnly
+ @MemberOrder(sequence="1")
+ public List<StableEntity> list();
+
+ @MemberOrder(sequence="2")
+ public StableEntity newTransientEntity();
+
+ @Idempotent
+ @MemberOrder(sequence="2")
+ public StableEntity newPersistentEntity(
+ @Named("name") String name);
+
+
+}
Added: incubator/isis/trunk/framework/tck/tck-fixture/src/main/java/org/apache/isis/tck/fixture/stables/StableEntityFixture.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-fixture/src/main/java/org/apache/isis/tck/fixture/stables/StableEntityFixture.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-fixture/src/main/java/org/apache/isis/tck/fixture/stables/StableEntityFixture.java (added)
+++ incubator/isis/trunk/framework/tck/tck-fixture/src/main/java/org/apache/isis/tck/fixture/stables/StableEntityFixture.java Wed Oct 12 06:45:00 2011
@@ -0,0 +1,52 @@
+/*
+ * 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.tck.fixture.stables;
+
+import org.apache.isis.applib.fixtures.AbstractFixture;
+import org.apache.isis.tck.dom.stables.StableEntity;
+import org.apache.isis.tck.dom.stables.StableEntityRepository;
+
+
+public class StableEntityFixture extends AbstractFixture {
+
+ @Override
+ public void install() {
+ createEntity("John");
+ createEntity("Mary");
+ createEntity("Bill");
+ createEntity("Sally");
+ createEntity("Diedre");
+ }
+
+ private StableEntity createEntity(String name) {
+ return stableEntityRepository.newPersistentEntity(name);
+ }
+
+
+ // {{ injected: StableEntityRepository
+ private StableEntityRepository stableEntityRepository;
+
+ public void setStableEntityRepository(final StableEntityRepository stableEntityRepository) {
+ this.stableEntityRepository = stableEntityRepository;
+ }
+ // }}
+
+
+
+}
Added: incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/stables/StableEntityRepositoryDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/stables/StableEntityRepositoryDefault.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/stables/StableEntityRepositoryDefault.java (added)
+++ incubator/isis/trunk/framework/tck/tck-objstore-dflt/src/main/java/org/apache/isis/tck/objstore/dflt/stables/StableEntityRepositoryDefault.java Wed Oct 12 06:45:00 2011
@@ -0,0 +1,51 @@
+/*
+ * 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.tck.objstore.dflt.stables;
+
+import org.apache.isis.tck.dom.AbstractEntityRepository;
+import org.apache.isis.tck.dom.stables.StableEntity;
+import org.apache.isis.tck.dom.stables.StableEntityRepository;
+
+public class StableEntityRepositoryDefault extends AbstractEntityRepository<StableEntity> implements StableEntityRepository {
+
+ public StableEntityRepositoryDefault() {
+ super(StableEntity.class);
+ }
+
+ @Override
+ public String getId() {
+ return "stables";
+ }
+
+ @Override
+ public StableEntity newTransientEntity() {
+ return newTransientInstance(StableEntity.class);
+ }
+
+ @Override
+ public StableEntity newPersistentEntity(String name) {
+ StableEntity entity = newTransientEntity();
+ entity.setName(name);
+ getContainer().persist(entity);
+ return entity;
+ }
+
+
+}
Modified: incubator/isis/trunk/framework/viewer/dnd-tck/src/main/resources/isis.properties
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/dnd-tck/src/main/resources/isis.properties?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/dnd-tck/src/main/resources/isis.properties (original)
+++ incubator/isis/trunk/framework/viewer/dnd-tck/src/main/resources/isis.properties Wed Oct 12 06:45:00 2011
@@ -16,18 +16,22 @@
# under the License.
isis.services.prefix = org.apache.isis.tck.objstore.dflt
isis.services =\
- scalars.ApplibValuesEntityRepositoryDefault,\
- scalars.JdkValuesEntityRepositoryDefault,\
- scalars.PrimitiveValuesEntityRepositoryDefault,\
- scalars.WrapperValuesEntityRepositoryDefault
+ scalars.ApplibValuedEntityRepositoryDefault,\
+ scalars.JdkValuedEntityRepositoryDefault,\
+ scalars.PrimitiveValuedEntityRepositoryDefault,\
+ scalars.WrapperValuedEntityRepositoryDefault, \
+ simples.SimpleEntityRepositoryDefault,\
+ stables.StableEntityRepositoryDefault
isis.fixtures.prefix= org.apache.isis.tck.fixture
isis.fixtures=\
LogonAsSvenFixture,\
- scalars.ApplibValuesEntityFixture,\
- scalars.JdkValuesEntityFixture,\
- scalars.PrimitiveValuesEntityFixture,\
- scalars.WrapperValuesEntityFixture
+ scalars.ApplibValuedEntityFixture,\
+ scalars.JdkValuedEntityFixture,\
+ scalars.PrimitiveValuedEntityFixture,\
+ scalars.WrapperValuedEntityFixture,\
+ simples.SimpleEntityFixture,\
+ stables.StableEntityFixture
isis.exploration.users=sven, dick, bob
Modified: incubator/isis/trunk/framework/viewer/html-tck/src/main/webapp/WEB-INF/isis.properties
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/html-tck/src/main/webapp/WEB-INF/isis.properties?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/html-tck/src/main/webapp/WEB-INF/isis.properties (original)
+++ incubator/isis/trunk/framework/viewer/html-tck/src/main/webapp/WEB-INF/isis.properties Wed Oct 12 06:45:00 2011
@@ -16,18 +16,22 @@
# under the License.
isis.services.prefix = org.apache.isis.tck.objstore.dflt
isis.services =\
- scalars.ApplibValuesEntityRepositoryDefault,\
- scalars.JdkValuesEntityRepositoryDefault,\
- scalars.PrimitiveValuesEntityRepositoryDefault,\
- scalars.WrapperValuesEntityRepositoryDefault
+ scalars.ApplibValuedEntityRepositoryDefault,\
+ scalars.JdkValuedEntityRepositoryDefault,\
+ scalars.PrimitiveValuedEntityRepositoryDefault,\
+ scalars.WrapperValuedEntityRepositoryDefault, \
+ simples.SimpleEntityRepositoryDefault,\
+ stables.StableEntityRepositoryDefault
isis.fixtures.prefix= org.apache.isis.tck.fixture
isis.fixtures=\
LogonAsSvenFixture,\
- scalars.ApplibValuesEntityFixture,\
- scalars.JdkValuesEntityFixture,\
- scalars.PrimitiveValuesEntityFixture,\
- scalars.WrapperValuesEntityFixture
+ scalars.ApplibValuedEntityFixture,\
+ scalars.JdkValuedEntityFixture,\
+ scalars.PrimitiveValuedEntityFixture,\
+ scalars.WrapperValuedEntityFixture,\
+ simples.SimpleEntityFixture,\
+ stables.StableEntityFixture
isis.exploration.users=sven, dick, bob
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulRequest.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulRequest.java?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulRequest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/RestfulRequest.java Wed Oct 12 06:45:00 2011
@@ -1,5 +1,7 @@
package org.apache.isis.viewer.json.applib;
+import static org.apache.isis.viewer.json.applib.util.UrlDecodeUtils.*;
+
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -34,6 +36,11 @@ public final class RestfulRequest {
}
};
}
+
+ @Override
+ public String toString() {
+ return name().toLowerCase();
+ }
}
public static class QueryParameter<Q> {
@@ -79,9 +86,14 @@ public final class RestfulRequest {
}
// special case processing
if(values.length == 1) {
- return getParser().valueOf(values[0]);
+ return getParser().valueOf(urlDecode(values[0]));
}
- return getParser().valueOf(values);
+ return getParser().valueOf(urlDecode(values));
+ }
+
+ @Override
+ public String toString() {
+ return getName();
}
}
@@ -107,6 +119,11 @@ public final class RestfulRequest {
void setHeader(ClientRequest clientRequest, X t) {
clientRequest.header(getName(), parser.asString(t));
}
+
+ @Override
+ public String toString() {
+ return getName();
+ }
}
private final ClientRequest clientRequest;
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/blocks/Link.java Wed Oct 12 06:45:00 2011
@@ -58,6 +58,10 @@ public final class Link extends JsonRepr
return this;
}
+ public JsonRepresentation getValue() {
+ return getRepresentation("value");
+ }
+
public Method getMethod() {
String methodStr = asObjectNode().path("method").getTextValue();
return Method.valueOf(methodStr);
@@ -122,7 +126,7 @@ public final class Link extends JsonRepr
public String toString() {
return "Link [rel=" + getRel() + ", href=" + getHref()+ ", method=" + getMethod() + "]";
}
-
+
}
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/JsonMapper.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/JsonMapper.java?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/JsonMapper.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/JsonMapper.java Wed Oct 12 06:45:00 2011
@@ -31,6 +31,7 @@ import org.codehaus.jackson.map.deser.Js
import org.codehaus.jackson.map.deser.StdDeserializerProvider;
import org.codehaus.jackson.map.module.SimpleModule;
import org.codehaus.jackson.type.JavaType;
+import org.jboss.resteasy.client.ClientResponse;
public final class JsonMapper {
@@ -133,7 +134,8 @@ public final class JsonMapper {
}
public <T> T read(Response response, Class<T> requiredType) throws JsonParseException, JsonMappingException, IOException {
- Object entityObj = response.getEntity();
+ final ClientResponse<?> clientResponse = (ClientResponse<?>)response; // a shame, but needed if calling resources directly
+ Object entityObj = clientResponse.getEntity(String.class);
if(entityObj == null) {
return null;
}
Added: incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/UrlDecodeUtils.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/UrlDecodeUtils.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/UrlDecodeUtils.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/main/java/org/apache/isis/viewer/json/applib/util/UrlDecodeUtils.java Wed Oct 12 06:45:00 2011
@@ -0,0 +1,51 @@
+package org.apache.isis.viewer.json.applib.util;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.net.URLEncoder;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.jboss.resteasy.client.ClientRequest;
+import org.jboss.resteasy.util.URLUtils;
+
+import com.google.common.base.Function;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+public final class UrlDecodeUtils {
+
+ public final static Function<String, String> FUNCTION = new Function<String, String>() {
+
+ @Override
+ public String apply(String input) {
+ try {
+ return URLDecoder.decode(input, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ return "";
+ }
+ }
+ };
+
+ private UrlDecodeUtils() {}
+
+ public static String urlDecode(String string) {
+ return FUNCTION.apply(string);
+ }
+
+ public static List<String> urlDecode(List<String> values) {
+ return Lists.transform(values, FUNCTION);
+ }
+
+ public static String[] urlDecode(String[] values) {
+ final List<String> asList = Arrays.asList(values);
+ return urlDecode(asList).toArray(new String[]{});
+ }
+
+}
Modified: incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RestfulRequestQueryParameterTest_valueOf.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RestfulRequestQueryParameterTest_valueOf.java?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RestfulRequestQueryParameterTest_valueOf.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-applib/src/test/java/org/apache/isis/viewer/json/applib/RestfulRequestQueryParameterTest_valueOf.java Wed Oct 12 06:45:00 2011
@@ -3,6 +3,8 @@ package org.apache.isis.viewer.json.appl
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -79,6 +81,21 @@ public class RestfulRequestQueryParamete
assertThat(valueOf.get(1).get(1), is("c"));
}
+ @Test
+ public void commaSeparatedListUrlEncoded() throws UnsupportedEncodingException {
+
+ final QueryParameter<List<List<String>>> queryParameter = RestfulRequest.QueryParameter.FOLLOW_LINKS;
+ parameterMap.put("x-ro-follow-links", new String[]{URLEncoder.encode("a,b.c", "UTF-8")});
+ List<List<String>> valueOf = queryParameter.valueOf(parameterMap);
+
+ assertThat(valueOf.size(), is(2));
+ assertThat(valueOf.get(0).size(), is(1));
+ assertThat(valueOf.get(0).get(0), is("a"));
+ assertThat(valueOf.get(1).size(), is(2));
+ assertThat(valueOf.get(1).get(0), is("b"));
+ assertThat(valueOf.get(1).get(1), is("c"));
+ }
+
}
Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/main/webapp/WEB-INF/isis.properties
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/main/webapp/WEB-INF/isis.properties?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/main/webapp/WEB-INF/isis.properties (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/main/webapp/WEB-INF/isis.properties Wed Oct 12 06:45:00 2011
@@ -20,7 +20,8 @@ isis.services =\
scalars.JdkValuedEntityRepositoryDefault,\
scalars.PrimitiveValuedEntityRepositoryDefault,\
scalars.WrapperValuedEntityRepositoryDefault, \
- simples.SimpleEntityRepositoryDefault
+ simples.SimpleEntityRepositoryDefault,\
+ stables.StableEntityRepositoryDefault
isis.fixtures.prefix= org.apache.isis.tck.fixture
isis.fixtures=\
@@ -29,7 +30,8 @@ isis.fixtures=\
scalars.JdkValuedEntityFixture,\
scalars.PrimitiveValuedEntityFixture,\
scalars.WrapperValuedEntityFixture,\
- simples.SimpleEntityFixture\
+ simples.SimpleEntityFixture,\
+ stables.StableEntityFixture
isis.reflector.class-substitutor=org.apache.isis.runtimes.dflt.bytecode.dflt.classsubstitutor.CglibClassSubstitutor
Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/RepresentationMatchers.java Wed Oct 12 06:45:00 2011
@@ -1,7 +1,5 @@
package org.apache.isis.viewer.json.tck;
-import java.io.IOException;
-
import javax.ws.rs.core.CacheControl;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
@@ -14,8 +12,6 @@ import org.apache.isis.viewer.json.appli
import org.apache.isis.viewer.json.applib.blocks.Link;
import org.apache.isis.viewer.json.applib.blocks.Method;
import org.apache.isis.viewer.json.tck.RepresentationMatchers.AbstractMatcherBuilder;
-import org.codehaus.jackson.JsonParseException;
-import org.codehaus.jackson.map.JsonMappingException;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
@@ -115,7 +111,7 @@ public class RepresentationMatchers {
}
- public static <T> void assertThat(T actual, AbstractMatcherBuilder<T> matcherBuilder) {
+ public static <T extends JsonRepresentation> void assertThat(T actual, AbstractMatcherBuilder<T> matcherBuilder) {
Assert.assertThat(actual, matcherBuilder.build());
}
@@ -128,7 +124,7 @@ public class RepresentationMatchers {
}
- public static abstract class AbstractMatcherBuilder<T> {
+ public static abstract class AbstractMatcherBuilder<T extends JsonRepresentation> {
protected RestfulClient client;
public AbstractMatcherBuilder() {
@@ -142,12 +138,14 @@ public class RepresentationMatchers {
public abstract Matcher<T> build();
}
- public static class LinkMatcherBuilder extends AbstractMatcherBuilder<Link> {
+ public static class LinkMatcherBuilder extends AbstractMatcherBuilder<JsonRepresentation> {
private HttpStatusCode statusCode;
private Method method;
private String rel;
private String href;
private Matcher<String> hrefMatcher;
+ private Matcher<JsonRepresentation> valueMatcher;
+ private Boolean novalue;
private LinkMatcherBuilder(RestfulClient client) {
super(client);
@@ -173,6 +171,21 @@ public class RepresentationMatchers {
return this;
}
+ public LinkMatcherBuilder novalue() {
+ if(valueMatcher != null) {
+ throw new IllegalStateException("cannot assert on both there being a value and there not being a value");
+ }
+ this.novalue = true;
+ return this;
+ }
+
+ public LinkMatcherBuilder value(Matcher<JsonRepresentation> valueMatcher) {
+ if(this.novalue != null) {
+ throw new IllegalStateException("cannot assert on both there being a value and there not being a value");
+ }
+ this.valueMatcher = valueMatcher;
+ return this;
+ }
public LinkMatcherBuilder returning(HttpStatusCode statusCode) {
this.statusCode = statusCode;
@@ -180,13 +193,12 @@ public class RepresentationMatchers {
}
@Override
- public Matcher<Link> build() {
-
- return new TypeSafeMatcher<Link>() {
+ public Matcher<JsonRepresentation> build() {
+ return new TypeSafeMatcher<JsonRepresentation>() {
@Override
public void describeTo(Description description) {
- description.appendText("a link ");
+ description.appendText("a link");
if(rel != null) {
description.appendText(" with rel ").appendText(rel);
}
@@ -200,13 +212,20 @@ public class RepresentationMatchers {
if(method != null) {
description.appendText(" with method ").appendValue(method);
}
+ if(novalue) {
+ description.appendText(" with no value");
+ }
+ if(valueMatcher != null) {
+ description.appendText(" with value ");
+ valueMatcher.describeTo(description);
+ }
// trigger link being followed
if(statusCode != null) {
if(client == null) {
- description.appendText(" !!! provide client in matcher's constructor !!!");
+ throw new IllegalStateException("require client in order to assert on statusCode");
}
- description.appendText(" that when followed");
+ description.appendText(" that when followed returns status " + statusCode);
}
// assertions on response
@@ -216,7 +235,11 @@ public class RepresentationMatchers {
}
@Override
- public boolean matchesSafely(Link link) {
+ public boolean matchesSafely(JsonRepresentation linkRepr) {
+ if(linkRepr == null) {
+ return false;
+ }
+ Link link = linkRepr.asLink();
if(rel != null && !rel.equals(link.getRel())) {
return false;
}
@@ -229,6 +252,12 @@ public class RepresentationMatchers {
if(method != null && !method.equals(link.getMethod())) {
return false;
}
+ if(novalue !=null && novalue && link.getValue() != null) {
+ return false;
+ }
+ if(valueMatcher != null && !valueMatcher.matches(link)) {
+ return false;
+ }
// follow link if criteria require it
Response linkedResp = null;
Modified: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_xrofollowlinks.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_xrofollowlinks.java?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_xrofollowlinks.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/home/HomePageResourceTest_xrofollowlinks.java Wed Oct 12 06:45:00 2011
@@ -1,5 +1,10 @@
package org.apache.isis.viewer.json.tck.resources.home;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.nullValue;
+import static org.junit.Assert.assertThat;
+
import org.apache.isis.runtimes.dflt.webserver.WebServer;
import org.apache.isis.viewer.json.applib.HttpMethod;
import org.apache.isis.viewer.json.applib.RestfulClient;
@@ -7,7 +12,6 @@ import org.apache.isis.viewer.json.appli
import org.apache.isis.viewer.json.applib.RestfulRequest.QueryParameter;
import org.apache.isis.viewer.json.applib.RestfulResponse;
import org.apache.isis.viewer.json.applib.homepage.HomePageRepresentation;
-import org.apache.isis.viewer.json.applib.homepage.HomePageResource;
import org.apache.isis.viewer.json.tck.IsisWebServerRule;
import org.junit.Before;
import org.junit.Rule;
@@ -20,24 +24,35 @@ public class HomePageResourceTest_xrofol
public IsisWebServerRule webServerRule = new IsisWebServerRule();
private RestfulClient client;
- private HomePageResource resource;
@Before
public void setUp() throws Exception {
WebServer webServer = webServerRule.getWebServer();
client = new RestfulClient(webServer.getBase());
-
- resource = client.getHomePageResource();
}
@Test
public void xrofollowLinks() throws Exception {
- // TODO: this needs to be more generic
- final RestfulRequest request = client.createRequest(HttpMethod.GET, "/").withArg(QueryParameter.FOLLOW_LINKS, "user,services");
- final RestfulResponse<HomePageRepresentation> restfulResponse = request.executeT();
+ RestfulRequest request;
+ RestfulResponse<HomePageRepresentation> restfulResponse;
+ HomePageRepresentation repr;
+ request = client.createRequest(HttpMethod.GET, "/");
+ restfulResponse = request.executeT();
+ repr = restfulResponse.getEntity();
+ assertThat(repr.getUser().getValue(), is(nullValue()));
+ assertThat(repr.getCapabilities().getValue(), is(nullValue()));
+ assertThat(repr.getServices().getValue(), is(nullValue()));
+
+ request = client.createRequest(HttpMethod.GET, "/").withArg(QueryParameter.FOLLOW_LINKS, "user,services,capabilities");
+ restfulResponse = request.executeT();
+ repr = restfulResponse.getEntity();
+
+ assertThat(repr.getUser().getValue(), is(not(nullValue())));
+ assertThat(repr.getCapabilities().getValue(), is(not(nullValue())));
+ assertThat(repr.getServices().getValue(), is(not(nullValue())));
}
Copied: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java (from r1178710, incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/DomainServiceResourceTest_invokeAction.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java?p2=incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java&p1=incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/DomainServiceResourceTest_invokeAction.java&r1=1178710&r2=1182226&rev=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/DomainServiceResourceTest_invokeAction.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/invoke/DomainServiceResourceTest_invokeAction.java Wed Oct 12 06:45:00 2011
@@ -1,4 +1,4 @@
-package org.apache.isis.viewer.json.tck.resources.service;
+package org.apache.isis.viewer.json.tck.resources.service.invoke;
import java.io.IOException;
Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_accept.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_accept.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_accept.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_accept.java Wed Oct 12 06:45:00 2011
@@ -0,0 +1,63 @@
+package org.apache.isis.viewer.json.tck.resources.service.services;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import javax.ws.rs.core.MediaType;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.apache.isis.viewer.json.applib.HttpMethod;
+import org.apache.isis.viewer.json.applib.RepresentationType;
+import org.apache.isis.viewer.json.applib.RestfulClient;
+import org.apache.isis.viewer.json.applib.RestfulRequest;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
+import org.apache.isis.viewer.json.applib.homepage.HomePageRepresentation;
+import org.apache.isis.viewer.json.tck.IsisWebServerRule;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+public class DomainServiceResourceTest_services_accept {
+
+ @Rule
+ public IsisWebServerRule webServerRule = new IsisWebServerRule();
+
+ private RestfulClient client;
+
+ @Before
+ public void setUp() throws Exception {
+ WebServer webServer = webServerRule.getWebServer();
+ client = new RestfulClient(webServer.getBase());
+ }
+
+ @Test
+ public void applicationJson() throws Exception {
+
+ final RestfulRequest request =
+ client.createRequest(HttpMethod.GET, "services").withHeader(RestfulRequest.Header.ACCEPT, MediaType.APPLICATION_JSON_TYPE);
+ final RestfulResponse<HomePageRepresentation> restfulResponse = request.executeT();
+
+ assertThat(restfulResponse.getStatus(), is(HttpStatusCode.OK));
+ }
+
+ @Test
+ public void applicationJson_profileList() throws Exception {
+
+ final RestfulRequest request =
+ client.createRequest(HttpMethod.GET, "services").withHeader(RestfulRequest.Header.ACCEPT, RepresentationType.LIST.getMediaType());
+ final RestfulResponse<HomePageRepresentation> restfulResponse = request.executeT();
+
+ assertThat(restfulResponse.getStatus(), is(HttpStatusCode.OK));
+ }
+
+ @Test
+ public void applicationJson_invalid() throws Exception {
+
+ final RestfulRequest request = client.createRequest(HttpMethod.GET, "services").withHeader(RestfulRequest.Header.ACCEPT, RepresentationType.USER.getMediaType());
+ final RestfulResponse<HomePageRepresentation> restfulResponse = request.executeT();
+
+ assertThat(restfulResponse.getStatus(), is(HttpStatusCode.NOT_ACCEPTABLE));
+ }
+
+}
Copied: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_representationAndHeaders.java (from r1178710, incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/DomainServiceResourceTest_services.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_representationAndHeaders.java?p2=incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_representationAndHeaders.java&p1=incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/DomainServiceResourceTest_services.java&r1=1178710&r2=1182226&rev=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/DomainServiceResourceTest_services.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_representationAndHeaders.java Wed Oct 12 06:45:00 2011
@@ -1,4 +1,4 @@
-package org.apache.isis.viewer.json.tck.resources.service;
+package org.apache.isis.viewer.json.tck.resources.service.services;
import static org.apache.isis.viewer.json.tck.RepresentationMatchers.assertThat;
import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isArray;
@@ -24,7 +24,6 @@ import org.apache.isis.viewer.json.appli
import org.apache.isis.viewer.json.applib.domainobjects.DomainServiceResource;
import org.apache.isis.viewer.json.applib.domainobjects.ListRepresentation;
import org.apache.isis.viewer.json.tck.IsisWebServerRule;
-import org.apache.isis.viewer.json.tck.RepresentationMatchers;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.junit.Before;
@@ -32,7 +31,7 @@ import org.junit.Rule;
import org.junit.Test;
-public class DomainServiceResourceTest_services {
+public class DomainServiceResourceTest_services_representationAndHeaders {
@Rule
public IsisWebServerRule webServerRule = new IsisWebServerRule();
Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_xrofollowlinks.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_xrofollowlinks.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_xrofollowlinks.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/service/services/DomainServiceResourceTest_services_xrofollowlinks.java Wed Oct 12 06:45:00 2011
@@ -0,0 +1,67 @@
+package org.apache.isis.viewer.json.tck.resources.service.services;
+
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.assertThat;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isArray;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isLink;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isMap;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.junit.Assert.assertThat;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.apache.isis.viewer.json.applib.HttpMethod;
+import org.apache.isis.viewer.json.applib.JsonRepresentation;
+import org.apache.isis.viewer.json.applib.RestfulClient;
+import org.apache.isis.viewer.json.applib.RestfulRequest;
+import org.apache.isis.viewer.json.applib.RestfulRequest.QueryParameter;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.domainobjects.ListRepresentation;
+import org.apache.isis.viewer.json.tck.IsisWebServerRule;
+import org.hamcrest.Matchers;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+
+public class DomainServiceResourceTest_services_xrofollowlinks {
+
+ @Rule
+ public IsisWebServerRule webServerRule = new IsisWebServerRule();
+
+ private RestfulClient client;
+
+ @Before
+ public void setUp() throws Exception {
+ WebServer webServer = webServerRule.getWebServer();
+ client = new RestfulClient(webServer.getBase());
+ }
+
+ @Test
+ public void xrofollowLinks() throws Exception {
+
+ RestfulRequest request;
+ RestfulResponse<ListRepresentation> restfulResponse;
+ ListRepresentation repr;
+
+ request = client.createRequest(HttpMethod.GET, "services");
+ restfulResponse = request.executeT();
+ repr = restfulResponse.getEntity();
+
+ assertThat(repr.getValues(), isArray());
+ assertThat(repr.getValues().arraySize(), is(greaterThan(0)));
+ assertThat(repr.getValues().arrayGet(0), isLink().novalue());
+
+ request = client.createRequest(HttpMethod.GET, "services").withArg(QueryParameter.FOLLOW_LINKS, "values");
+ restfulResponse = request.executeT();
+ repr = restfulResponse.getEntity();
+
+ assertThat(repr.getValues().arrayGet(0), isLink().value(is(not(Matchers.<JsonRepresentation>nullValue()))));
+ assertThat(repr.getValues().arrayGet(0).getRepresentation("value"), isMap());
+ }
+
+
+}
+
+
+
\ No newline at end of file
Added: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_accept.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_accept.java?rev=1182226&view=auto
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_accept.java (added)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_accept.java Wed Oct 12 06:45:00 2011
@@ -0,0 +1,63 @@
+package org.apache.isis.viewer.json.tck.resources.user;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import javax.ws.rs.core.MediaType;
+
+import org.apache.isis.runtimes.dflt.webserver.WebServer;
+import org.apache.isis.viewer.json.applib.HttpMethod;
+import org.apache.isis.viewer.json.applib.RepresentationType;
+import org.apache.isis.viewer.json.applib.RestfulClient;
+import org.apache.isis.viewer.json.applib.RestfulRequest;
+import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
+import org.apache.isis.viewer.json.applib.homepage.HomePageRepresentation;
+import org.apache.isis.viewer.json.tck.IsisWebServerRule;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+public class UserResourceTest_accept {
+
+ @Rule
+ public IsisWebServerRule webServerRule = new IsisWebServerRule();
+
+ private RestfulClient client;
+
+ @Before
+ public void setUp() throws Exception {
+ WebServer webServer = webServerRule.getWebServer();
+ client = new RestfulClient(webServer.getBase());
+ }
+
+ @Test
+ public void applicationJson() throws Exception {
+
+ final RestfulRequest request =
+ client.createRequest(HttpMethod.GET, "user").withHeader(RestfulRequest.Header.ACCEPT, MediaType.APPLICATION_JSON_TYPE);
+ final RestfulResponse<HomePageRepresentation> restfulResponse = request.executeT();
+
+ assertThat(restfulResponse.getStatus(), is(HttpStatusCode.OK));
+ }
+
+ @Test
+ public void applicationJson_profileUser() throws Exception {
+
+ final RestfulRequest request =
+ client.createRequest(HttpMethod.GET, "user").withHeader(RestfulRequest.Header.ACCEPT, RepresentationType.USER.getMediaType());
+ final RestfulResponse<HomePageRepresentation> restfulResponse = request.executeT();
+
+ assertThat(restfulResponse.getStatus(), is(HttpStatusCode.OK));
+ }
+
+ @Test
+ public void applicationJson_invalid() throws Exception {
+
+ final RestfulRequest request = client.createRequest(HttpMethod.GET, "user").withHeader(RestfulRequest.Header.ACCEPT, RepresentationType.HOME_PAGE.getMediaType());
+ final RestfulResponse<HomePageRepresentation> restfulResponse = request.executeT();
+
+ assertThat(restfulResponse.getStatus(), is(HttpStatusCode.NOT_ACCEPTABLE));
+ }
+
+}
Copied: incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java (from r1178710, incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java?p2=incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java&p1=incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest.java&r1=1178710&r2=1182226&rev=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-tck/src/test/java/org/apache/isis/viewer/json/tck/resources/user/UserResourceTest_representationAndHeaders.java Wed Oct 12 06:45:00 2011
@@ -1,6 +1,10 @@
package org.apache.isis.viewer.json.tck.resources.user;
import static org.apache.isis.viewer.json.tck.RepresentationMatchers.assertThat;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.hasMaxAge;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.hasParameter;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.hasSubType;
+import static org.apache.isis.viewer.json.tck.RepresentationMatchers.hasType;
import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isArray;
import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isFollowableLinkToSelf;
import static org.apache.isis.viewer.json.tck.RepresentationMatchers.isLink;
@@ -12,6 +16,8 @@ import static org.junit.Assert.assertTha
import java.io.IOException;
+import javax.ws.rs.core.CacheControl;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status.Family;
@@ -19,6 +25,7 @@ import org.apache.isis.runtimes.dflt.web
import org.apache.isis.viewer.json.applib.RepresentationType;
import org.apache.isis.viewer.json.applib.RestfulClient;
import org.apache.isis.viewer.json.applib.RestfulResponse;
+import org.apache.isis.viewer.json.applib.RestfulResponse.Header;
import org.apache.isis.viewer.json.applib.RestfulResponse.HttpStatusCode;
import org.apache.isis.viewer.json.applib.blocks.Method;
import org.apache.isis.viewer.json.applib.user.UserRepresentation;
@@ -32,7 +39,7 @@ import org.junit.Rule;
import org.junit.Test;
-public class UserResourceTest {
+public class UserResourceTest_representationAndHeaders {
@Rule
public IsisWebServerRule webServerRule = new IsisWebServerRule();
@@ -48,7 +55,6 @@ public class UserResourceTest {
resource = client.getUserResource();
}
- @Ignore("self link is broken")
@Test
public void representation() throws Exception {
@@ -61,8 +67,6 @@ public class UserResourceTest {
// then
assertThat(jsonResp.getStatus(), is(HttpStatusCode.OK));
- assertThat(jsonResp.getHeader(RestfulResponse.Header.CONTENT_TYPE), is(RepresentationType.USER.getMediaType()));
- assertThat(jsonResp.getHeader(RestfulResponse.Header.CACHE_CONTROL).getMaxAge(), is(3600));
UserRepresentation repr = jsonResp.getEntity();
assertThat(repr, is(not(nullValue())));
@@ -78,7 +82,29 @@ public class UserResourceTest {
assertThat(repr.getExtensions(), isMap());
}
- @Ignore("self link is broken")
+ @Test
+ public void headers() throws Exception {
+
+ // given
+ Response resp = resource.user();
+
+ // when
+ RestfulResponse<UserRepresentation> restfulResponse = RestfulResponse.ofT(resp);
+
+ // then
+ final MediaType contentType = restfulResponse.getHeader(Header.CONTENT_TYPE);
+ assertThat(contentType, hasType("application"));
+ assertThat(contentType, hasSubType("json"));
+ assertThat(contentType, hasParameter("profile", "http://restfulobjects.org/profiles/user"));
+ assertThat(contentType, is(RepresentationType.USER.getMediaType()));
+
+ // then
+ final CacheControl cacheControl = restfulResponse.getHeader(Header.CACHE_CONTROL);
+ assertThat(cacheControl, hasMaxAge(60*60));
+ assertThat(cacheControl.getMaxAge(), is(60*60));
+ }
+
+
@Test
public void self_isFollowable() throws Exception {
// given
Copied: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkFollower.java (from r1179434, incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/PathFollower.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkFollower.java?p2=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkFollower.java&p1=incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/PathFollower.java&r1=1179434&r2=1182226&rev=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/PathFollower.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/LinkFollower.java Wed Oct 12 06:45:00 2011
@@ -6,7 +6,8 @@ import java.util.Map;
import com.google.common.collect.Maps;
-public final class PathFollower {
+@SuppressWarnings({"rawtypes","unchecked"})
+public final class LinkFollower {
public final static Map<String,Map> asGraph(List<List<String>> links) {
if(links == null) {
@@ -32,29 +33,29 @@ public final class PathFollower {
mergeInto(list.subList(1, list.size()), submap);
}
- public final static PathFollower initial(List<List<String>> links) {
+ public final static LinkFollower initial(List<List<String>> links) {
final Map<String, Map> graph = asGraph(links);
- return new PathFollower(graph, Mode.FOLLOWING_PATH);
+ return new LinkFollower(graph, Mode.FOLLOWINGPATH);
}
- public final static PathFollower following(Map<String,Map> graph) {
- return new PathFollower(graph, Mode.FOLLOWING_PATH);
+ public final static LinkFollower following(Map<String,Map> graph) {
+ return new LinkFollower(graph, Mode.FOLLOWINGPATH);
}
- private static PathFollower terminated() {
- return new PathFollower(null, Mode.TERMINATED);
+ private static LinkFollower terminated() {
+ return new LinkFollower(null, Mode.TERMINATED);
}
private enum Mode {
- FOLLOWING_PATH,
+ FOLLOWINGPATH,
TERMINATED;
}
private final Map<String, Map> graph;
private Mode mode;
- private PathFollower(Map<String, Map> graph, Mode mode) {
+ private LinkFollower(Map<String, Map> graph, Mode mode) {
this.graph = graph;
this.mode = mode;
}
@@ -62,21 +63,25 @@ public final class PathFollower {
/**
* A little algebra...
*/
- public PathFollower follow(String path) {
+ public LinkFollower follow(String path) {
if(path == null || mode == Mode.TERMINATED) {
- return PathFollower.terminated();
+ return LinkFollower.terminated();
}
- if(mode == Mode.FOLLOWING_PATH) {
+ if(mode == Mode.FOLLOWINGPATH) {
Map remaining = graph.get(path);
if(remaining != null) {
- return PathFollower.following(remaining);
+ return LinkFollower.following(remaining);
} else {
- return PathFollower.terminated();
+ return LinkFollower.terminated();
}
}
- return PathFollower.terminated();
+ return LinkFollower.terminated();
}
-
+
+ public boolean isFollowing() {
+ return mode == Mode.FOLLOWINGPATH;
+ }
+
public boolean isTerminated() {
return mode == Mode.TERMINATED;
}
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RendererFactory.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RendererFactory.java?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RendererFactory.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/RendererFactory.java Wed Oct 12 06:45:00 2011
@@ -8,6 +8,6 @@ public interface RendererFactory {
RepresentationType getRepresentationType();
- ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, PathFollower pathFollower, JsonRepresentation representation);
+ ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, LinkFollower linkFollower, JsonRepresentation representation);
}
\ No newline at end of file
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/representations/ReprRendererAbstract.java Wed Oct 12 06:45:00 2011
@@ -13,32 +13,32 @@ import org.apache.isis.viewer.json.viewe
public abstract class ReprRendererAbstract<R extends ReprRendererAbstract<R, T>, T> implements ReprRenderer<R, T> {
protected final ResourceContext resourceContext;
- private final PathFollower pathFollower;
+ private final LinkFollower linkFollower;
private final RepresentationType representationType;
protected final JsonRepresentation representation;
protected boolean includesSelf;
- public ReprRendererAbstract(ResourceContext resourceContext, PathFollower pathFollower, RepresentationType representationType, JsonRepresentation representation) {
+ public ReprRendererAbstract(ResourceContext resourceContext, LinkFollower linkFollower, RepresentationType representationType, JsonRepresentation representation) {
this.resourceContext = resourceContext;
- this.pathFollower = asProvidedElseCreate(pathFollower);
+ this.linkFollower = asProvidedElseCreate(linkFollower);
this.representationType = representationType;
this.representation = representation;
}
- private PathFollower asProvidedElseCreate(PathFollower pathFollower) {
- if(pathFollower != null) {
- return pathFollower;
+ private LinkFollower asProvidedElseCreate(LinkFollower linkFollower) {
+ if(linkFollower != null) {
+ return linkFollower;
}
- return PathFollower.initial(resourceContext.getFollowLinks());
+ return LinkFollower.initial(resourceContext.getFollowLinks());
}
public ResourceContext getResourceContext() {
return resourceContext;
}
- public PathFollower getPathFollower() {
- return pathFollower;
+ public LinkFollower getLinkFollower() {
+ return linkFollower;
}
@Override
Modified: incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesReprRenderer.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesReprRenderer.java?rev=1182226&r1=1182225&r2=1182226&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesReprRenderer.java (original)
+++ incubator/isis/trunk/framework/viewer/json/json-viewer/src/main/java/org/apache/isis/viewer/json/viewer/resources/capabilities/CapabilitiesReprRenderer.java Wed Oct 12 06:45:00 2011
@@ -3,7 +3,7 @@ package org.apache.isis.viewer.json.view
import org.apache.isis.viewer.json.applib.JsonRepresentation;
import org.apache.isis.viewer.json.applib.RepresentationType;
import org.apache.isis.viewer.json.viewer.ResourceContext;
-import org.apache.isis.viewer.json.viewer.representations.PathFollower;
+import org.apache.isis.viewer.json.viewer.representations.LinkFollower;
import org.apache.isis.viewer.json.viewer.representations.ReprRenderer;
import org.apache.isis.viewer.json.viewer.representations.ReprRendererAbstract;
import org.apache.isis.viewer.json.viewer.representations.ReprRendererFactoryAbstract;
@@ -16,13 +16,13 @@ public class CapabilitiesReprRenderer ex
}
@Override
- public ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, PathFollower pathFollower, JsonRepresentation representation) {
- return new CapabilitiesReprRenderer(resourceContext, pathFollower, getRepresentationType(), representation);
+ public ReprRenderer<?, ?> newRenderer(ResourceContext resourceContext, LinkFollower linkFollower, JsonRepresentation representation) {
+ return new CapabilitiesReprRenderer(resourceContext, linkFollower, getRepresentationType(), representation);
}
}
- private CapabilitiesReprRenderer(ResourceContext resourceContext, PathFollower pathFollower, RepresentationType representationType, JsonRepresentation representation) {
- super(resourceContext, pathFollower, representationType, representation);
+ private CapabilitiesReprRenderer(ResourceContext resourceContext, LinkFollower linkFollower, RepresentationType representationType, JsonRepresentation representation) {
+ super(resourceContext, linkFollower, representationType, representation);
}
@Override