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 2015/10/14 02:28:46 UTC
[01/12] isis git commit: ISIS-1213: @Mixin annotation,
@DomainObject(nature=MIXIN), facet factories,
implementation of ObjectActionMixin.
Repository: isis
Updated Branches:
refs/heads/ISIS-1213 [created] 3a299c200
ISIS-1213: @Mixin annotation, @DomainObject(nature=MIXIN), facet factories, implementation of ObjectActionMixin.
still testing. still need to do ObjectAssociationMixin. still need to document
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/643b3941
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/643b3941
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/643b3941
Branch: refs/heads/ISIS-1213
Commit: 643b39414c6bb1822f08c1ffbbb3ae3fd39d8fab
Parents: 10877d9
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Oct 12 09:40:03 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Oct 12 09:41:23 2015 +0100
----------------------------------------------------------------------
.../org/apache/isis/applib/AppManifest.java | 15 +-
.../apache/isis/applib/annotation/Mixin.java | 38 +++
.../apache/isis/applib/annotation/Nature.java | 12 +-
.../applib/fixturescripts/FixtureScripts.java | 5 +-
.../DomainObjectAnnotationFacetFactory.java | 15 +-
...bleObjectFacetForDomainObjectAnnotation.java | 3 +-
.../facets/object/mixin/MixinFacet.java | 41 +++
.../facets/object/mixin/MixinFacetAbstract.java | 88 ++++++
.../MixinFacetForDomainObjectAnnotation.java | 58 ++++
.../mixin/MixinFacetForMixinAnnotation.java | 57 ++++
.../MixinFacetForMixinAnnotationFactory.java | 57 ++++
.../RecreatableObjectFacetFactory.java | 4 +-
...jectFacetForRecreatableObjectAnnotation.java | 37 +++
...bjectFacetForRecreatableObjectInterface.java | 42 +++
...atableObjectFacetForViewModelAnnotation.java | 37 ---
...eatableObjectFacetForViewModelInterface.java | 42 ---
.../specloader/specimpl/MixedInMember.java | 33 +++
.../specimpl/ObjectActionMixedIn.java | 267 +++++++++++++++++++
.../ObjectActionParameterParseable.java | 6 +-
.../specimpl/ObjectSpecificationAbstract.java | 221 ++++++++-------
.../specimpl/OneToOneActionParameterImpl.java | 10 +-
.../dflt/ProgrammingModelFacetsJava5.java | 2 +
.../RecreatableObjectFacetFactoryTest.java | 2 +-
.../IsisComponentProviderAbstract.java | 27 ++
.../IsisComponentProviderDefault2.java | 3 +-
.../IsisComponentProviderUsingInstallers.java | 2 +-
.../viewer/wicket/model/models/EntityModel.java | 2 +-
27 files changed, 926 insertions(+), 200 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
index a391a75..515ea54 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/AppManifest.java
@@ -160,7 +160,6 @@ public interface AppManifest {
*/
public Map<String,String> getConfigurationProperties();
-
/**
* Holds the set of domain services, persistent entities and fixture scripts.services
*/
@@ -195,6 +194,20 @@ public interface AppManifest {
}
//endregion
+ //region > mixinTypes
+ private Set<Class<?>> mixinTypes;
+
+ /**
+ * @return <tt>null</tt> if no appManifest is defined
+ */
+ public Set<Class<?>> getMixinTypes() {
+ return mixinTypes;
+ }
+ public void setMixinTypes(final Set<Class<?>> mixinTypes) {
+ this.mixinTypes = mixinTypes;
+ }
+ //endregion
+
//region > fixtureScriptTypes
private Set<Class<? extends FixtureScript>> fixtureScriptTypes;
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/applib/src/main/java/org/apache/isis/applib/annotation/Mixin.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Mixin.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Mixin.java
new file mode 100644
index 0000000..7f4f646
--- /dev/null
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Mixin.java
@@ -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.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;
+
+/**
+ * An object that acts as a mix-in to some other object, contributing behaviour and/or derived state based on the
+ * domain object.
+ */
+@Inherited
+@Target({ ElementType.TYPE })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Mixin {
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/applib/src/main/java/org/apache/isis/applib/annotation/Nature.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/annotation/Nature.java b/core/applib/src/main/java/org/apache/isis/applib/annotation/Nature.java
index 42b5998..e941e2a 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/annotation/Nature.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/annotation/Nature.java
@@ -75,6 +75,16 @@ public enum Nature {
* The identity of a view model is determined solely by the state of object's properties (that have
* not been set to be ignored using {@link org.apache.isis.applib.annotation.Property#notPersisted()}).
* </p>
+ *
+ * @see ViewModel
+ */
+ VIEW_MODEL,
+
+ /**
+ * An object that acts as a mix-in to some other object, contributing behaviour and/or derived state based on the
+ * domain object.
+ *
+ * @see Mixin
*/
- VIEW_MODEL
+ MIXIN
}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
----------------------------------------------------------------------
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
index 7089de0..161140e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
@@ -50,9 +50,10 @@ import org.apache.isis.applib.services.memento.MementoService.Memento;
import org.apache.isis.applib.util.ObjectContracts;
/**
- * @deprecated - instead implement {@link org.apache.isis.applib.services.fixturespec.FixtureScriptsSpecificationProvider}.
+ * Rather than subclassing, instead implement
+ * {@link org.apache.isis.applib.services.fixturespec.FixtureScriptsSpecificationProvider}. The framework will
+ * automatically provide a default implementation configured using that provider service.
*/
-@Deprecated
public abstract class FixtureScripts extends AbstractService {
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
index 1d8e160..0d092b2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/DomainObjectAnnotationFacetFactory.java
@@ -18,10 +18,11 @@
*/
package org.apache.isis.core.metamodel.facets.object.domainobject;
-
import java.util.Collection;
import java.util.Map;
+
import com.google.common.collect.Maps;
+
import org.apache.isis.applib.annotation.Audited;
import org.apache.isis.applib.annotation.AutoComplete;
import org.apache.isis.applib.annotation.Bounded;
@@ -32,8 +33,6 @@ import org.apache.isis.applib.annotation.PublishedObject;
import org.apache.isis.applib.services.HasTransactionId;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.config.IsisConfigurationAware;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionServiceAware;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManagerAware;
import org.apache.isis.core.metamodel.facetapi.Facet;
@@ -59,8 +58,12 @@ import org.apache.isis.core.metamodel.facets.object.domainobject.publishing.Publ
import org.apache.isis.core.metamodel.facets.object.domainobject.recreatable.RecreatableObjectFacetForDomainObjectAnnotation;
import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
import org.apache.isis.core.metamodel.facets.object.immutable.immutableannot.ImmutableFacetForImmutableAnnotation;
+import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
+import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacetForDomainObjectAnnotation;
import org.apache.isis.core.metamodel.facets.object.publishedobject.PublishedObjectFacet;
import org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet;
+import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
+import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionServiceAware;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
@@ -271,10 +274,12 @@ public class DomainObjectAnnotationFacetFactory extends FacetFactoryAbstract imp
final DomainObject domainObject = Annotations.getAnnotation(cls, DomainObject.class);
final FacetHolder facetHolder = processClassContext.getFacetHolder();
- final ViewModelFacet facet = RecreatableObjectFacetForDomainObjectAnnotation.create(
+ final ViewModelFacet recreatableObjectFacet = RecreatableObjectFacetForDomainObjectAnnotation.create(
domainObject, getSpecificationLoader(), adapterManager, servicesInjector, facetHolder);
+ FacetUtil.addFacet(recreatableObjectFacet);
- FacetUtil.addFacet(facet);
+ final MixinFacet mixinFacet = MixinFacetForDomainObjectAnnotation.create(cls, facetHolder, servicesInjector);
+ FacetUtil.addFacet(mixinFacet);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/recreatable/RecreatableObjectFacetForDomainObjectAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/recreatable/RecreatableObjectFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/recreatable/RecreatableObjectFacetForDomainObjectAnnotation.java
index 60e3a5f..4667611 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/recreatable/RecreatableObjectFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/recreatable/RecreatableObjectFacetForDomainObjectAnnotation.java
@@ -43,7 +43,7 @@ public class RecreatableObjectFacetForDomainObjectAnnotation extends Recreatable
final Nature nature = domainObject.nature();
- if(nature == null || nature == Nature.JDO_ENTITY) {
+ if(nature == null) {
return null;
}
@@ -51,6 +51,7 @@ public class RecreatableObjectFacetForDomainObjectAnnotation extends Recreatable
{
case NOT_SPECIFIED:
case JDO_ENTITY:
+ case MIXIN:
// not a recreatable object, so no facet
return null;
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacet.java
new file mode 100644
index 0000000..b3d4e40
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacet.java
@@ -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.core.metamodel.facets.object.mixin;
+
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Nature;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+/**
+ * Applies to {@link ObjectSpecification}s of classes that can act as a mix-in, namely that they are annotated
+ * appropriately (eg {@link org.apache.isis.applib.annotation.Mixin} or {@link DomainObject} with
+ * {@link DomainObject#nature()} of {@link Nature#MIXIN}) and which have a 1-arg constructor accepting an object
+ * (being the object this is a mix-in for).
+ */
+public interface MixinFacet extends Facet {
+
+ boolean isMixinFor(Class<?> candidateDomainType);
+
+ /**
+ * Returns the mixin around the provided domain object
+ */
+ Object instantiate(Object domainPojo);
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
new file mode 100644
index 0000000..a957129
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetAbstract.java
@@ -0,0 +1,88 @@
+/*
+ * 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.mixin;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.MarkerFacetAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public abstract class MixinFacetAbstract extends MarkerFacetAbstract implements MixinFacet {
+
+ private final Class<?> mixinType;
+ private final Class<?> constructorType;
+ private final ServicesInjector servicesInjector;
+
+ public static Class<? extends Facet> type() {
+ return MixinFacet.class;
+ }
+
+ public MixinFacetAbstract(
+ final Class<?> mixinType,
+ final Class<?> constructorType,
+ final FacetHolder holder,
+ final ServicesInjector servicesInjector) {
+ super(type(), holder);
+ this.mixinType = mixinType;
+ this.constructorType = constructorType;
+ this.servicesInjector = servicesInjector;
+ }
+
+ @Override
+ public boolean isMixinFor(final Class<?> candidateDomainType) {
+ if (candidateDomainType == null) {
+ return false;
+ }
+ return constructorType.isAssignableFrom(candidateDomainType);
+ }
+
+ @Override
+ public Object instantiate(final Object domainPojo) {
+ if(domainPojo == null) {
+ return null;
+ }
+ if(!constructorType.isAssignableFrom(domainPojo.getClass())) {
+ // shouldn't happen; ought we to fail-fast instead?
+ return null;
+ }
+ try {
+ final Constructor<?> constructor = mixinType.getConstructor(constructorType);
+ final Object mixinPojo = constructor.newInstance(domainPojo);
+ servicesInjector.injectServicesInto(mixinPojo);
+ return mixinPojo;
+ } catch (NoSuchMethodException e) {
+ // shouldn't happen; ought we to fail-fast instead?
+ return null;
+ } catch (InvocationTargetException e) {
+ // shouldn't happen; ought we to fail-fast instead?
+ return null;
+ } catch (InstantiationException e) {
+ // shouldn't happen; ought we to fail-fast instead?
+ return null;
+ } catch (IllegalAccessException e) {
+ // shouldn't happen; ought we to fail-fast instead?
+ return null;
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
new file mode 100644
index 0000000..3493fcc
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
@@ -0,0 +1,58 @@
+/*
+ * 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.mixin;
+
+import java.lang.reflect.Constructor;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public class MixinFacetForDomainObjectAnnotation extends MixinFacetAbstract {
+
+ public static Class<? extends Facet> type() {
+ return MixinFacet.class;
+ }
+
+ private MixinFacetForDomainObjectAnnotation(
+ final Class<?> mixinType,
+ final Class<?> constructorType,
+ final FacetHolder holder,
+ final ServicesInjector servicesInjector) {
+ super(mixinType, constructorType, holder, servicesInjector);
+ }
+
+ public static MixinFacet create(
+ final Class<?> candidateMixinType, final FacetHolder facetHolder,
+ final ServicesInjector servicesInjector) {
+ final Constructor<?>[] constructors = candidateMixinType.getConstructors();
+ for (Constructor<?> constructor : constructors) {
+ final Class<?>[] constructorTypes = constructor.getParameterTypes();
+ if(constructorTypes.length != 1) {
+ continue;
+ }
+ final Class<?> constructorType = constructorTypes[0];
+ return new MixinFacetForDomainObjectAnnotation(candidateMixinType, constructorType, facetHolder,
+ servicesInjector);
+ }
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java
new file mode 100644
index 0000000..ed369c5
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java
@@ -0,0 +1,57 @@
+/*
+ * 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.mixin;
+
+import java.lang.reflect.Constructor;
+
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+
+public class MixinFacetForMixinAnnotation extends MixinFacetAbstract {
+
+ public static Class<? extends Facet> type() {
+ return MixinFacet.class;
+ }
+
+ private MixinFacetForMixinAnnotation(
+ final Class<?> mixinType,
+ final Class<?> constructorType,
+ final FacetHolder holder,
+ final ServicesInjector servicesInjector) {
+ super(mixinType, constructorType, holder, servicesInjector);
+ }
+
+ public static MixinFacet create(
+ final Class<?> candidateMixinType, final FacetHolder facetHolder,
+ final ServicesInjector servicesInjector) {
+ final Constructor<?>[] constructors = candidateMixinType.getConstructors();
+ for (Constructor<?> constructor : constructors) {
+ final Class<?>[] constructorTypes = constructor.getParameterTypes();
+ if(constructorTypes.length != 1) {
+ continue;
+ }
+ final Class<?> constructorType = constructorTypes[0];
+ return new MixinFacetForMixinAnnotation(candidateMixinType, constructorType, facetHolder, servicesInjector);
+ }
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotationFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotationFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotationFactory.java
new file mode 100644
index 0000000..9f333d7
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotationFactory.java
@@ -0,0 +1,57 @@
+/*
+ * 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.mixin;
+
+import org.apache.isis.applib.annotation.Mixin;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjectorAware;
+
+public class MixinFacetForMixinAnnotationFactory extends FacetFactoryAbstract implements ServicesInjectorAware {
+
+ private ServicesInjector servicesInjector;
+
+ public MixinFacetForMixinAnnotationFactory() {
+ super(FeatureType.OBJECTS_ONLY);
+ }
+
+ @Override
+ public void process(final ProcessClassContext processClassContext) {
+
+ final Class<?> candidateMixinType = processClassContext.getCls();
+
+ final Mixin mixinAnnotation = candidateMixinType.getAnnotation(Mixin.class);
+ if(mixinAnnotation == null) {
+ return;
+ }
+ final FacetHolder facetHolder = processClassContext.getFacetHolder();
+
+ final MixinFacet mixinFacet = MixinFacetForMixinAnnotation.create(candidateMixinType, facetHolder,
+ servicesInjector);
+ facetHolder.addFacet(mixinFacet);
+ }
+
+ @Override
+ public void setServicesInjector(final ServicesInjector servicesInjector) {
+ this.servicesInjector = servicesInjector;
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java
index da8ccae..52bea48 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactory.java
@@ -57,7 +57,7 @@ public class RecreatableObjectFacetFactory extends FacetFactoryAbstract implemen
// ViewModel interface
if (ViewModel.class.isAssignableFrom(processClassContext.getCls())) {
- FacetUtil.addFacet(new RecreatableObjectFacetForViewModelInterface(processClassContext.getFacetHolder()));
+ FacetUtil.addFacet(new RecreatableObjectFacetForRecreatableObjectInterface(processClassContext.getFacetHolder()));
}
// ViewModel annotation
@@ -73,7 +73,7 @@ public class RecreatableObjectFacetFactory extends FacetFactoryAbstract implemen
}
private ViewModelFacet create(final org.apache.isis.applib.annotation.ViewModel annotation, final FacetHolder holder) {
- return annotation != null ? new RecreatableObjectFacetForViewModelAnnotation(holder, getSpecificationLoader(), adapterManager, servicesInjector) : null;
+ return annotation != null ? new RecreatableObjectFacetForRecreatableObjectAnnotation(holder, getSpecificationLoader(), adapterManager, servicesInjector) : null;
}
// //////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForRecreatableObjectAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForRecreatableObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForRecreatableObjectAnnotation.java
new file mode 100644
index 0000000..d1b3406
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForRecreatableObjectAnnotation.java
@@ -0,0 +1,37 @@
+/*
+ * 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.recreatable;
+
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+
+public class RecreatableObjectFacetForRecreatableObjectAnnotation extends RecreatableObjectFacetDeclarativeAbstract {
+
+ public RecreatableObjectFacetForRecreatableObjectAnnotation(
+ final FacetHolder holder,
+ final SpecificationLoader specificationLoader,
+ final AdapterManager adapterManager,
+ final ServicesInjector servicesInjector) {
+ super(holder, ArchitecturalLayer.APPLICATION, specificationLoader, adapterManager, servicesInjector);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForRecreatableObjectInterface.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForRecreatableObjectInterface.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForRecreatableObjectInterface.java
new file mode 100644
index 0000000..e3c23b5
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForRecreatableObjectInterface.java
@@ -0,0 +1,42 @@
+/*
+ * 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.recreatable;
+
+import org.apache.isis.applib.ViewModel;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+
+public class RecreatableObjectFacetForRecreatableObjectInterface extends RecreatableObjectFacetAbstract {
+
+ public RecreatableObjectFacetForRecreatableObjectInterface(final FacetHolder holder) {
+ super(holder, ArchitecturalLayer.APPLICATION);
+ }
+
+ @Override
+ public void initialize(Object pojo, String memento) {
+ final ViewModel viewModel = (ViewModel) pojo;
+ viewModel.viewModelInit(memento);
+ }
+
+ @Override
+ public String memento(Object pojo) {
+ final ViewModel viewModel = (ViewModel) pojo;
+ return viewModel.viewModelMemento();
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForViewModelAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForViewModelAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForViewModelAnnotation.java
deleted file mode 100644
index 17ba51f..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForViewModelAnnotation.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.recreatable;
-
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-
-public class RecreatableObjectFacetForViewModelAnnotation extends RecreatableObjectFacetDeclarativeAbstract {
-
- public RecreatableObjectFacetForViewModelAnnotation(
- final FacetHolder holder,
- final SpecificationLoader specificationLoader,
- final AdapterManager adapterManager,
- final ServicesInjector servicesInjector) {
- super(holder, ArchitecturalLayer.APPLICATION, specificationLoader, adapterManager, servicesInjector);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForViewModelInterface.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForViewModelInterface.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForViewModelInterface.java
deleted file mode 100644
index b503d69..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetForViewModelInterface.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.recreatable;
-
-import org.apache.isis.applib.ViewModel;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-
-public class RecreatableObjectFacetForViewModelInterface extends RecreatableObjectFacetAbstract {
-
- public RecreatableObjectFacetForViewModelInterface(final FacetHolder holder) {
- super(holder, ArchitecturalLayer.APPLICATION);
- }
-
- @Override
- public void initialize(Object pojo, String memento) {
- final ViewModel viewModel = (ViewModel) pojo;
- viewModel.viewModelInit(memento);
- }
-
- @Override
- public String memento(Object pojo) {
- final ViewModel viewModel = (ViewModel) pojo;
- return viewModel.viewModelMemento();
- }
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/MixedInMember.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/MixedInMember.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/MixedInMember.java
new file mode 100644
index 0000000..a2fac68
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/MixedInMember.java
@@ -0,0 +1,33 @@
+/**
+ * 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.specloader.specimpl;
+
+import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
+
+/**
+ * Interface indicating an a contributed association or action.
+ */
+public interface MixedInMember extends ObjectMember {
+
+ // not actually required, as of yet
+ // boolean isMixinOf(ObjectAction mixinAction);
+
+ // not actually required, as of yet
+ // ObjectSpecification getMixin();
+
+}
+
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
new file mode 100644
index 0000000..42abd39
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -0,0 +1,267 @@
+/**
+ * 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.specloader.specimpl;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.annotation.Bulk;
+import org.apache.isis.applib.annotation.InvokedOn;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.filter.Filter;
+import org.apache.isis.applib.services.actinvoc.ActionInvocationContext;
+import org.apache.isis.applib.services.bookmark.Bookmark;
+import org.apache.isis.applib.services.command.Command;
+import org.apache.isis.applib.services.command.Command.Executor;
+import org.apache.isis.applib.services.command.CommandContext;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
+import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
+import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
+import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
+import org.apache.isis.core.metamodel.interactions.InteractionUtils;
+import org.apache.isis.core.metamodel.interactions.UsabilityContext;
+import org.apache.isis.core.metamodel.interactions.VisibilityContext;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
+
+public class ObjectActionMixedIn extends ObjectActionImpl implements MixedInMember {
+
+ /**
+ * The type of the mixin (providing the action), eg annotated with {@link org.apache.isis.applib.annotation.Mixin}.
+ */
+ private final Class<?> mixinType;
+
+ /**
+ * The {@link ObjectActionImpl} for the action being mixed in (ie on the {@link #mixinType}.
+ */
+ private final ObjectActionImpl mixinAction;
+
+ /**
+ * The domain object type being mixed in to (being supplemented).
+ */
+ private final ObjectSpecification mixedInType;
+
+ /**
+ * Hold facets rather than delegate to the mixin action
+ */
+ private final FacetHolder facetHolder = new FacetHolderImpl();
+
+ private final Identifier identifier;
+
+ public ObjectActionMixedIn(
+ final Class<?> mixinType,
+ final ObjectActionImpl mixinAction,
+ final ObjectSpecification mixedInType,
+ final ObjectMemberDependencies objectMemberDependencies) {
+ super(mixinAction.getFacetedMethod(), objectMemberDependencies);
+
+ this.mixinType = mixinType;
+ this.mixinAction = mixinAction;
+ this.mixedInType = mixedInType;
+
+ // copy over facets from mixin type to own.
+ FacetUtil.copyFacets(mixinAction.getFacetedMethod(), facetHolder);
+
+ // calculate the identifier
+ final Identifier mixinIdentifier = mixinAction.getFacetedMethod().getIdentifier();
+ final String memberName = mixinIdentifier.getMemberName();
+ List<String> memberParameterNames = mixinIdentifier.getMemberParameterNames();
+ identifier = Identifier.actionIdentifier(getOnType().getCorrespondingClass().getName(), memberName, memberParameterNames);
+ }
+
+ @Override
+ public ObjectSpecification getOnType() {
+ return mixedInType;
+ }
+
+ public int getParameterCount() {
+ return mixinAction.getParameterCount();
+ }
+
+ public synchronized List<ObjectActionParameter> getParameters() {
+ return mixinAction.getParameters();
+ }
+
+ @Override
+ public Consent isVisible(
+ final ObjectAdapter mixedInAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy,
+ Where where) {
+ final VisibilityContext<?> ic = mixinAction.createVisibleInteractionContext(mixinAdapterFor(mixedInAdapter),
+ interactionInitiatedBy, where);
+ return InteractionUtils.isVisibleResult(this, ic).createConsent();
+ }
+
+ @Override
+ public Consent isUsable(
+ final ObjectAdapter mixedInAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy, final Where where) {
+ final UsabilityContext<?> ic = mixinAction.createUsableInteractionContext(mixinAdapterFor(mixedInAdapter),
+ interactionInitiatedBy, where);
+ return InteractionUtils.isUsableResult(this, ic).createConsent();
+ }
+
+ @Override
+ public ObjectAdapter[] getDefaults(final ObjectAdapter mixedInAdapter) {
+ return mixinAction.getDefaults(mixinAdapterFor(mixedInAdapter));
+ }
+
+ @Override
+ public ObjectAdapter[][] getChoices(
+ final ObjectAdapter mixedInAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return mixinAction.getChoices(mixinAdapterFor(mixedInAdapter), interactionInitiatedBy);
+ }
+
+ public Consent isProposedArgumentSetValid(
+ final ObjectAdapter mixedInAdapter,
+ final ObjectAdapter[] proposedArguments,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return mixinAction.isProposedArgumentSetValid(mixinAdapterFor(mixedInAdapter), proposedArguments, interactionInitiatedBy);
+ }
+
+ @Override
+ public ObjectAdapter execute(
+ final ObjectAdapter mixedInAdapter,
+ final ObjectAdapter[] arguments,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+
+ // this code also exists in ActionInvocationFacetViaMethod
+ // we need to repeat it here because the target adapter should be the mixedInAdapter, not the mixin
+
+ final BulkFacet bulkFacet = getFacet(BulkFacet.class);
+ if (bulkFacet != null) {
+
+ final ActionInvocationContext actionInvocationContext =
+ getServicesInjector().lookupService(ActionInvocationContext.class);
+ if (actionInvocationContext != null &&
+ actionInvocationContext.getInvokedOn() == null) {
+
+ actionInvocationContext.setInvokedOn(InvokedOn.OBJECT);
+ actionInvocationContext.setDomainObjects(Collections.singletonList(mixedInAdapter.getObject()));
+ }
+
+ final Bulk.InteractionContext bulkInteractionContext = getServicesInjector().lookupService(Bulk.InteractionContext.class);
+ if (bulkInteractionContext != null &&
+ bulkInteractionContext.getInvokedAs() == null) {
+
+ bulkInteractionContext.setInvokedAs(Bulk.InteractionContext.InvokedAs.REGULAR);
+ actionInvocationContext.setDomainObjects(Collections.singletonList(mixedInAdapter.getObject()));
+ }
+
+
+ }
+
+ final CommandContext commandContext = getServicesInjector().lookupService(CommandContext.class);
+ final Command command = commandContext != null ? commandContext.getCommand() : null;
+
+ if(command != null && command.getExecutor() == Executor.USER) {
+
+ if (command.getTarget() != null) {
+ // already set up by a edit form
+ // don't overwrite
+ } else {
+ command.setTargetClass(CommandUtil.targetClassNameFor(mixedInAdapter));
+ command.setTargetAction(CommandUtil.targetActionNameFor(this));
+ command.setArguments(CommandUtil.argDescriptionFor(this, arguments));
+
+ final Bookmark targetBookmark = CommandUtil.bookmarkFor(mixedInAdapter);
+ command.setTarget(targetBookmark);
+ }
+ }
+
+ return mixinAction.execute(mixinAdapterFor(mixedInAdapter), arguments, interactionInitiatedBy);
+ }
+
+ // //////////////////////////////////////
+ // FacetHolder
+ // //////////////////////////////////////
+
+ @Override
+ public Class<? extends Facet>[] getFacetTypes() {
+ return facetHolder.getFacetTypes();
+ }
+
+ @Override
+ public <T extends Facet> T getFacet(Class<T> cls) {
+ return facetHolder.getFacet(cls);
+ }
+
+ @Override
+ public boolean containsFacet(Class<? extends Facet> facetType) {
+ return facetHolder.containsFacet(facetType);
+ }
+
+ @Override
+ public boolean containsDoOpFacet(Class<? extends Facet> facetType) {
+ return facetHolder.containsDoOpFacet(facetType);
+ }
+
+ @Override
+ public List<Facet> getFacets(Filter<Facet> filter) {
+ return facetHolder.getFacets(filter);
+ }
+
+ @Override
+ public void addFacet(Facet facet) {
+ facetHolder.addFacet(facet);
+ }
+
+ @Override
+ public void addFacet(MultiTypedFacet facet) {
+ facetHolder.addFacet(facet);
+ }
+
+ @Override
+ public void removeFacet(Facet facet) {
+ facetHolder.removeFacet(facet);
+ }
+
+ @Override
+ public void removeFacet(Class<? extends Facet> facetType) {
+ facetHolder.removeFacet(facetType);
+ }
+
+
+ // //////////////////////////////////////
+
+ /* (non-Javadoc)
+ * @see org.apache.isis.core.metamodel.specloader.specimpl.ObjectMemberAbstract#getIdentifier()
+ */
+ @Override
+ public Identifier getIdentifier() {
+ return identifier;
+ }
+
+ // //////////////////////////////////////
+
+ private ObjectAdapter mixinAdapterFor(final ObjectAdapter mixedInAdapter) {
+ final ObjectSpecification objectSpecification = getSpecificationLoader().loadSpecification(mixinType);
+ final MixinFacet mixinFacet = objectSpecification.getFacet(MixinFacet.class);
+ final Object mixinPojo = mixinFacet.instantiate(mixedInAdapter.getObject());
+ return getPersistenceSessionService().adapterFor(mixinPojo);
+ }
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
index e58fcbb..70fa8ef 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
@@ -126,12 +126,10 @@ public class ObjectActionParameterParseable extends ObjectActionParameterAbstrac
}
private MutableProposedHolder getProposedHolder(final ObjectAdapter owner) {
- final Instance instance = getInstance(owner);
- if (!(instance instanceof MutableProposedHolder)) {
+ if (!(owner instanceof MutableProposedHolder)) {
throw new IllegalArgumentException("Instance should implement MutableProposedHolder");
}
- final MutableProposedHolder proposedHolder = (MutableProposedHolder) instance;
- return proposedHolder;
+ return (MutableProposedHolder) owner;
}
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 8718912..0ee3b2b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -24,6 +24,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
import com.google.common.base.Function;
import com.google.common.collect.Collections2;
@@ -34,6 +35,7 @@ import com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.isis.applib.AppManifest;
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.NotPersistable;
import org.apache.isis.applib.annotation.When;
@@ -65,6 +67,7 @@ import org.apache.isis.core.metamodel.facets.object.encodeable.EncodableFacet;
import org.apache.isis.core.metamodel.facets.object.icon.IconFacet;
import org.apache.isis.core.metamodel.facets.object.immutable.ImmutableFacet;
import org.apache.isis.core.metamodel.facets.object.membergroups.MemberGroupLayoutFacet;
+import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
import org.apache.isis.core.metamodel.facets.object.notpersistable.NotPersistableFacet;
import org.apache.isis.core.metamodel.facets.object.objectspecid.ObjectSpecIdFacet;
import org.apache.isis.core.metamodel.facets.object.parented.ParentedCollectionFacet;
@@ -118,6 +121,8 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
}
}
+ //region > fields
+
private final DeploymentCategory deploymentCategory;
private final ServicesInjector servicesInjector;
private final SpecificationLoader specificationLoader;
@@ -168,11 +173,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
private CssClassFacet cssClassFacet;
private IntrospectionState introspected = IntrospectionState.NOT_INTROSPECTED;
+ //endregion
- // //////////////////////////////////////////////////////////////////////
- // Constructor
- // //////////////////////////////////////////////////////////////////////
-
+ //region > Constructor
public ObjectSpecificationAbstract(
final Class<?> introspectedClass,
final String shortName,
@@ -198,11 +201,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
protected DeploymentCategory getDeploymentCategory() {
return deploymentCategory;
}
+ //endregion
- // //////////////////////////////////////////////////////////////////////
- // Stuff immediately derivable from class
- // //////////////////////////////////////////////////////////////////////
-
+ //region > Stuff immediately derivable from class
@Override
public FeatureType getFeatureType() {
return FeatureType.OBJECT;
@@ -273,10 +274,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return !(getIntrospectionState() == IntrospectionState.INTROSPECTED);
}
+ //endregion
- // //////////////////////////////////////////////////////////////////////
- // Introspection (part 1)
- // //////////////////////////////////////////////////////////////////////
+ //region > Introspection (part 1)
public abstract void introspectTypeHierarchyAndMembers();
@@ -356,9 +356,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
}
}
- // //////////////////////////////////////////////////////////////////////
- // Introspection (part 2)
- // //////////////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > Introspection (part 2)
public void updateFromFacetValues() {
@@ -384,11 +384,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
}
}
+ //endregion
-
- // //////////////////////////////////////////////////////////////////////
- // Title, Icon
- // //////////////////////////////////////////////////////////////////////
+ //region > Title, Icon
@Override
public String getTitle(final ObjectAdapter targetAdapter, final Localization localization) {
@@ -423,19 +421,21 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return cssClassFacet == null ? null : cssClassFacet.cssClass(reference);
}
- // //////////////////////////////////////////////////////////////////////
- // Specification
- // //////////////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > getInstance (unused)
+ /**
+ * simply returns the input parameter.
+ */
+ @Deprecated
@Override
public Instance getInstance(final ObjectAdapter adapter) {
return adapter;
}
+ //endregion
- // //////////////////////////////////////////////////////////////////////
- // Hierarchical
- // //////////////////////////////////////////////////////////////////////
-
+ //region > Hierarchical
/**
* Determines if this class represents the same class, or a subclass, of the
* specified class.
@@ -474,10 +474,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return superclassSpec != null ? superclassSpec.isOfType(specification) : false;
}
- // //////////////////////////////////////////////////////////////////////
- // Name, Description, Persistability
- // //////////////////////////////////////////////////////////////////////
+ //endregion
+ //region > Name, Description, Persistability
/**
* The name according to any available {@link org.apache.isis.core.metamodel.facets.all.named.NamedFacet},
* but falling back to {@link #getFullIdentifier()} otherwise.
@@ -525,9 +524,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
}
- // //////////////////////////////////////////////////////////////////////
- // Facet Handling
- // //////////////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > Facet Handling
@Override
public <Q extends Facet> Q getFacet(final Class<Q> facetType) {
@@ -573,38 +572,38 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return facet != null && !facet.isNoop();
}
- // //////////////////////////////////////////////////////////////////////
- // DefaultValue
- // //////////////////////////////////////////////////////////////////////
+ //endregion
+ //region > DefaultValue - unused
+ /**
+ * @deprecated - never called.
+ * @return - always returns <tt>null</tt>
+ */
+ @Deprecated
@Override
public Object getDefaultValue() {
return null;
}
+ //endregion
- // //////////////////////////////////////////////////////////////////////
- // Identifier
- // //////////////////////////////////////////////////////////////////////
-
+ //region > Identifier
@Override
public Identifier getIdentifier() {
return identifier;
}
- // //////////////////////////////////////////////////////////////////
- // create InteractionContext
- // //////////////////////////////////////////////////////////////////
+ //endregion
+ //region > createTitleInteractionContext
@Override
public ObjectTitleContext createTitleInteractionContext(final AuthenticationSession session, final InteractionInitiatedBy interactionMethod, final ObjectAdapter targetObjectAdapter) {
return new ObjectTitleContext(targetObjectAdapter, getIdentifier(), targetObjectAdapter.titleString(null),
interactionMethod);
}
- // //////////////////////////////////////////////////////////////////////
- // Superclass, Interfaces, Subclasses, isAbstract
- // //////////////////////////////////////////////////////////////////////
+ //endregion
+ //region > Superclass, Interfaces, Subclasses, isAbstract
@Override
public ObjectSpecification superclass() {
return superclassSpec;
@@ -630,10 +629,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return isAbstract;
}
- // //////////////////////////////////////////////////////////////////////
- // Associations
- // //////////////////////////////////////////////////////////////////////
+ //endregion
+ //region > Associations
@Override
public List<ObjectAssociation> getAssociations(final Contributed contributed) {
// the "contributed.isIncluded()" guard is required because we cannot do this too early;
@@ -738,10 +736,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return list;
}
- // //////////////////////////////////////////////////////////////////////
- // getObjectActions
- // //////////////////////////////////////////////////////////////////////
+ //endregion
+ //region > getObjectActions
@Override
public List<ObjectAction> getObjectActions(
final List<ActionType> types,
@@ -756,6 +753,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
synchronized (this.objectActions) {
final List<ObjectAction> actions = Lists.newArrayList(this.objectActions);
actions.addAll(createContributeeActions());
+ actions.addAll(createMixinActions());
sortCacheAndUpdateActions(actions);
contributeeActionsAdded = true;
}
@@ -787,10 +785,10 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return getObjectActions(Collections.singletonList(type), contributed, filter);
}
- // //////////////////////////////////////////////////////////////////////
- // sorting
- // //////////////////////////////////////////////////////////////////////
-
+ //endregion
+
+ //region > sorting
+
protected List<ObjectAssociation> sortAssociations(final List<ObjectAssociation> associations) {
final DeweyOrderSet orderSet = DeweyOrderSet.createOrderSet(associations);
final MemberGroupLayoutFacet memberGroupLayoutFacet = this.getFacet(MemberGroupLayoutFacet.class);
@@ -848,18 +846,13 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
}
}
- // //////////////////////////////////////////////////////////////////////
- // getServiceActionsReturning
- // //////////////////////////////////////////////////////////////////////
-
private Iterable<Object> getServicePojos() {
return getServicesInjector().getRegisteredServices();
}
+ //endregion
- // //////////////////////////////////////////////////////////////////////
- // contributee associations (properties and collections)
- // //////////////////////////////////////////////////////////////////////
+ //region > contributee associations (properties and collections)
private List<ObjectAssociation> createContributeeAssociations() {
if (isService() || isValue()) {
@@ -884,17 +877,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
contributeeAssociationsToAppendTo.addAll(contributeeAssociations);
}
- /**
- * Synthesises {@link ObjectAssociation}s from matching {@link ObjectAction}s of any of the services
- * that accept one parameter
- */
- private List<ObjectAssociation> createContributeeAssociations(
- final ObjectAdapter serviceAdapter) {
-
- final Object servicePojo = serviceAdapter.getObject();
- return createContributeeAssociations(servicePojo);
- }
-
private List<ObjectAssociation> createContributeeAssociations(final Object servicePojo) {
final Class<?> serviceClass = servicePojo.getClass();
final ObjectSpecification specification = specificationLoader.loadSpecification(serviceClass);
@@ -930,12 +912,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
}
private Function<ObjectActionImpl, ObjectAssociation> createContributeeAssociationFunctor(
- final ObjectAdapter serviceAdapter, final ObjectSpecification contributeeType) {
- final Object servicePojo = serviceAdapter.getObject();
- return createContributeeAssociationFunctor(servicePojo, contributeeType);
- }
-
- private Function<ObjectActionImpl, ObjectAssociation> createContributeeAssociationFunctor(
final Object servicePojo,
final ObjectSpecification contributeeType) {
return new Function<ObjectActionImpl, ObjectAssociation>(){
@@ -953,10 +929,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
};
}
- // //////////////////////////////////////////////////////////////////////
- // contributee actions
- // //////////////////////////////////////////////////////////////////////
+ //endregion
+ //region > contributee actions
/**
* All contributee actions (each wrapping a service's contributed action) for this spec.
*
@@ -1032,11 +1007,71 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
}
return -1;
}
+ //endregion
+
+ //region > mixin actions
+ /**
+ * All contributee actions (each wrapping a service's contributed action) for this spec.
+ *
+ * <p>
+ * If this specification {@link #isService() is actually for} a service,
+ * then returns an empty list.
+ */
+ protected List<ObjectAction> createMixinActions() {
+ if (isService() || isValue()) {
+ return Collections.emptyList();
+ }
+ final Set<Class<?>> mixinTypes = AppManifest.Registry.instance().getMixinTypes();
+ if(mixinTypes == null) {
+ return Collections.emptyList();
+ }
+
+ final List<ObjectAction> mixinActions = Lists.newArrayList();
+
+ for (final Class<?> mixinType : mixinTypes) {
+ addMixinActionsIfAny(mixinType, mixinActions);
+ }
+ return mixinActions;
+ }
- // //////////////////////////////////////////////////////////////////////
- // validity
- // //////////////////////////////////////////////////////////////////////
+ private void addMixinActionsIfAny(
+ final Class<?> mixinType,
+ final List<ObjectAction> mixinActionsToAppendTo) {
+ final ObjectSpecification specification = getSpecificationLoader().loadSpecification(mixinType);
+ if (specification == this) {
+ return;
+ }
+ final MixinFacet mixinFacet = specification.getFacet(MixinFacet.class);
+ if(mixinFacet == null) {
+ // this shouldn't happen; perhaps it would be more correct to throw an exception?
+ return;
+ }
+ if(!mixinFacet.isMixinFor(getCorrespondingClass())) {
+ return;
+ }
+ final List<ObjectAction> actions = Lists.newArrayList();
+ final List<ObjectAction> mixinActions = specification.getObjectActions(ActionType.ALL, Contributed.INCLUDED, Filters
+ .<ObjectAction>any());
+ for (final ObjectAction mixinTypeAction : mixinActions) {
+ if (isAlwaysHidden(mixinTypeAction)) {
+ continue;
+ }
+ if(!(mixinTypeAction instanceof ObjectActionImpl)) {
+ continue;
+ }
+ final ObjectActionImpl mixinAction = (ObjectActionImpl) mixinTypeAction;
+
+ ObjectActionMixedIn mixedInAction =
+ new ObjectActionMixedIn(mixinType, mixinAction, this, objectMemberDependencies);
+ facetProcessor.processMemberOrder(metadataProperties, mixedInAction);
+ actions.add(mixedInAction);
+ }
+ mixinActionsToAppendTo.addAll(actions);
+ }
+
+ //endregion
+ //region > validity
@Override
public Consent isValid(final ObjectAdapter targetAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
return isValidResult(targetAdapter, interactionInitiatedBy).createConsent();
@@ -1061,11 +1096,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
final ObjectAdapter targetAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
return new ObjectValidityContext(targetAdapter, getIdentifier(), interactionInitiatedBy);
}
+ //endregion
- // //////////////////////////////////////////////////////////////////////
- // convenience isXxx (looked up from facets)
- // //////////////////////////////////////////////////////////////////////
-
+ //region > convenience isXxx (looked up from facets)
@Override
public boolean isImmutable() {
return containsFacet(ImmutableFacet.class);
@@ -1112,9 +1145,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
}
- // //////////////////////////////////////////////////////////////////////
- // toString
- // //////////////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > toString
@Override
public String toString() {
@@ -1123,10 +1156,9 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return str.toString();
}
- // //////////////////////////////////////////////////////////////////////
- // Dependencies (injected in constructor)
- // //////////////////////////////////////////////////////////////////////
+ //endregion
+ //region > Dependencies (injected in constructor)
private ServicesInjector getServicesInjector() {
return servicesInjector;
}
@@ -1135,5 +1167,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return specificationLoader;
}
+ //endregion
}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
index ab6f362..1cbf084 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
@@ -60,7 +60,7 @@ public class OneToOneActionParameterImpl extends ObjectActionParameterAbstract i
/**
* Gets the proposed value of the {@link Instance} (downcast as a
- * {@link MutableProposed}, wrapping the proposed value into a
+ * {@link MutableProposedHolder}, wrapping the proposed value into a
* {@link ObjectAdapter}.
*/
@Override
@@ -72,7 +72,7 @@ public class OneToOneActionParameterImpl extends ObjectActionParameterAbstract i
/**
* Sets the proposed value of the {@link Instance} (downcast as a
- * {@link MutableProposed}, unwrapped the proposed value from a
+ * {@link MutableProposedHolder}, unwrapped the proposed value from a
* {@link ObjectAdapter}.
*/
public void set(final ObjectAdapter owner, final ObjectAdapter newValue) {
@@ -82,12 +82,10 @@ public class OneToOneActionParameterImpl extends ObjectActionParameterAbstract i
}
private MutableProposedHolder getProposedHolder(final ObjectAdapter owner) {
- final Instance instance = getInstance(owner);
- if (!(instance instanceof MutableProposedHolder)) {
+ if (!(owner instanceof MutableProposedHolder)) {
throw new IllegalArgumentException("Instance should implement MutableProposedHolder");
}
- final MutableProposedHolder proposedHolder = (MutableProposedHolder) instance;
- return proposedHolder;
+ return (MutableProposedHolder) owner;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index 8ec148b..f21e958 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -109,6 +109,7 @@ import org.apache.isis.core.metamodel.facets.object.immutable.immutablemarkerifc
import org.apache.isis.core.metamodel.facets.object.mask.annotation.MaskFacetOnTypeAnnotationFactory;
import org.apache.isis.core.metamodel.facets.object.maxlen.annotation.MaxLengthFacetOnTypeAnnotationFactory;
import org.apache.isis.core.metamodel.facets.object.membergroups.annotprop.MemberGroupLayoutFacetFactory;
+import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacetForMixinAnnotationFactory;
import org.apache.isis.core.metamodel.facets.object.multiline.annotation.MultiLineFacetOnTypeAnnotationFactory;
import org.apache.isis.core.metamodel.facets.object.named.annotation.NamedFacetOnTypeAnnotationFactory;
import org.apache.isis.core.metamodel.facets.object.notpersistable.notpersistableannot.NotPersistableFacetAnnotationFactory;
@@ -362,6 +363,7 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
addFactory(ImmutableFacetMarkerInterfaceFactory.class);
addFactory(RecreatableObjectFacetFactory.class);
+ addFactory(MixinFacetForMixinAnnotationFactory.class);
addFactory(MaxLengthFacetOnTypeAnnotationFactory.class);
addFactory(MaxLengthFacetOnActionAnnotationFactory.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
index f946ef4..296f711 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/object/recreatable/RecreatableObjectFacetFactoryTest.java
@@ -60,7 +60,7 @@ public class RecreatableObjectFacetFactoryTest extends AbstractFacetFactoryTest
final Facet facet = facetedMethod.getFacet(ViewModelFacet.class);
assertNotNull(facet);
- assertTrue(facet instanceof RecreatableObjectFacetForViewModelInterface);
+ assertTrue(facet instanceof RecreatableObjectFacetForRecreatableObjectInterface);
assertNoMethodsRemoved();
}
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
index 2a645b8..3a40061 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderAbstract.java
@@ -28,14 +28,19 @@ import javax.jdo.annotations.PersistenceCapable;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
+import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
import org.reflections.Reflections;
import org.reflections.vfs.Vfs;
import org.apache.isis.applib.AppManifest;
+import org.apache.isis.applib.annotation.DomainObject;
import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.Mixin;
+import org.apache.isis.applib.annotation.Nature;
import org.apache.isis.applib.fixturescripts.FixtureScript;
import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryServiceUsingReflections;
import org.apache.isis.core.commons.config.IsisConfiguration;
@@ -129,7 +134,14 @@ public abstract class IsisComponentProviderAbstract implements IsisComponentProv
}
}
+ /**
+ * @deprecated - unused, renamed to {@link #findAndRegisterTypes(AppManifest)}.
+ */
+ @Deprecated
protected void registerPackageNames(final AppManifest appManifest) {
+ findAndRegisterTypes(appManifest);
+ }
+ protected void findAndRegisterTypes(final AppManifest appManifest) {
final Iterable<String> packageNameList = modulePackageNamesFrom(appManifest);
final AppManifest.Registry registry = AppManifest.Registry.instance();
@@ -144,9 +156,24 @@ public abstract class IsisComponentProviderAbstract implements IsisComponentProv
final Set<Class<?>> persistenceCapableTypes = reflections.getTypesAnnotatedWith(PersistenceCapable.class);
final Set<Class<? extends FixtureScript>> fixtureScriptTypes = reflections.getSubTypesOf(FixtureScript.class);
+ final Set<Class<?>> mixinTypes = Sets.newHashSet();
+ mixinTypes.addAll(reflections.getTypesAnnotatedWith(Mixin.class));
+ final Set<Class<?>> domainObjectTypes = reflections.getTypesAnnotatedWith(DomainObject.class);
+ mixinTypes.addAll(
+ Lists.newArrayList(Iterables.filter(domainObjectTypes, new Predicate<Class<?>>() {
+ @Override
+ public boolean apply(@Nullable final Class<?> input) {
+ if(input == null) { return false; }
+ final DomainObject annotation = input.getAnnotation(DomainObject.class);
+ return annotation.nature() == Nature.MIXIN;
+ }
+ }))
+ );
+
registry.setDomainServiceTypes(domainServiceTypes);
registry.setPersistenceCapableTypes(persistenceCapableTypes);
registry.setFixtureScriptTypes(fixtureScriptTypes);
+ registry.setMixinTypes(mixinTypes);
}
private Iterable<String> modulePackageNamesFrom(final AppManifest appManifest) {
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
index 6356335..2e128a0 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderDefault2.java
@@ -39,7 +39,6 @@ import org.apache.isis.core.metamodel.layoutmetadata.LayoutMetadataReader;
import org.apache.isis.core.metamodel.layoutmetadata.json.LayoutMetadataReaderFromJson;
import org.apache.isis.core.metamodel.metamodelvalidator.dflt.MetaModelValidatorDefault;
import org.apache.isis.core.metamodel.progmodel.ProgrammingModel;
-import org.apache.isis.core.metamodel.services.ServicesInjectorDefault;
import org.apache.isis.core.metamodel.services.ServicesInjectorSpi;
import org.apache.isis.core.metamodel.spec.SpecificationLoaderSpi;
import org.apache.isis.core.metamodel.specloader.validator.MetaModelValidator;
@@ -83,7 +82,7 @@ public class IsisComponentProviderDefault2 extends IsisComponentProviderAbstract
if(appManifest != null) {
putAppManifestKey(appManifest);
- registerPackageNames(appManifest);
+ findAndRegisterTypes(appManifest);
specifyServicesAndRegisteredEntitiesUsing(appManifest);
List<Class<? extends FixtureScript>> fixtureClasses = appManifest.getFixtures();
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
index 9b3a612..29f14ac 100644
--- a/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
+++ b/core/runtime/src/main/java/org/apache/isis/core/runtime/systemusinginstallers/IsisComponentProviderUsingInstallers.java
@@ -68,7 +68,7 @@ public class IsisComponentProviderUsingInstallers extends IsisComponentProviderA
if(appManifest != null) {
putAppManifestKey(appManifest);
- registerPackageNames(appManifest);
+ findAndRegisterTypes(appManifest);
specifyServicesAndRegisteredEntitiesUsing(appManifest);
putConfigurationProperty(SystemConstants.SERVICES_INSTALLER_KEY, ServicesInstallerFromConfigurationAndAnnotation.NAME);
http://git-wip-us.apache.org/repos/asf/isis/blob/643b3941/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
----------------------------------------------------------------------
diff --git a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
index 460f843..fde03d7 100644
--- a/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
+++ b/core/viewer-wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/models/EntityModel.java
@@ -492,7 +492,7 @@ public class EntityModel extends BookmarkableModel<ObjectAdapter> {
/**
* Apply changes to the underlying adapter (possibly returning a new adapter).
*
- * @return adapter, which may be different from the original (if a {@link org.apache.isis.core.metamodel.facets.object.viewmodel.ViewModelFacet#isCloneable(Object) cloneable} view model, for example.
+ * @return adapter, which may be different from the original (if a {@link ViewModelFacet#isCloneable(Object) cloneable} view model, for example.
*/
public ObjectAdapter apply() {
ObjectAdapter adapter = getObjectAdapterMemento().getObjectAdapter(ConcurrencyChecking.CHECK);
[11/12] isis git commit: ISIS-1213: renamed metamodel classes
("...Impl" to "...Default");
derive name of ObjectActionMixedIn from mixin type (if "_");
simplified logic of #getParameters; also...
Posted by da...@apache.org.
ISIS-1213: renamed metamodel classes ("...Impl" to "...Default"); derive name of ObjectActionMixedIn from mixin type (if "_"); simplified logic of #getParameters; also...
renamed:
- ObjectActionImpl to ObjectActionDefault
- OneToOneAssociationImpl to OneToOneAssociationDefault
- OneToManyAssociationImpl to OneToManyAssociationDefault
- OneToOneActionParameterImpl to OneToOneActionParameterDefault
also:
- reduced number of methods subclassed under ObjectMemberAbstract by introducing overridable getFacetHolder()
- OneToOneAssociationContributee
- OneToManyAssociationContributee
- similarly for ObjectActionParameterAbstract
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/6c888136
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/6c888136
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/6c888136
Branch: refs/heads/ISIS-1213
Commit: 6c888136560b8648df110498cf5eb69f591095ed
Parents: 9f251d9
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Oct 13 21:34:29 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Oct 13 21:34:29 2015 +0100
----------------------------------------------------------------------
.../core/commons/lang/StringExtensions.java | 4 +-
.../specimpl/ObjectActionContributee.java | 17 +-
.../specimpl/ObjectActionDefault.java | 531 ++++++++++++++++++
.../specloader/specimpl/ObjectActionImpl.java | 535 -------------------
.../specimpl/ObjectActionMixedIn.java | 46 +-
.../specimpl/ObjectActionParameterAbstract.java | 44 +-
.../specimpl/ObjectMemberAbstract.java | 34 +-
.../specimpl/ObjectSpecificationAbstract.java | 20 +-
.../OneToManyAssociationContributee.java | 65 +--
.../specimpl/OneToManyAssociationDefault.java | 298 +++++++++++
.../specimpl/OneToManyAssociationImpl.java | 298 -----------
.../OneToOneActionParameterContributee.java | 2 +-
.../OneToOneActionParameterDefault.java | 35 ++
.../specimpl/OneToOneActionParameterImpl.java | 35 --
.../OneToOneActionParameterMixedIn.java | 3 +-
.../OneToOneAssociationContributee.java | 56 +-
.../specimpl/OneToOneAssociationDefault.java | 345 ++++++++++++
.../specimpl/OneToOneAssociationImpl.java | 356 ------------
.../dflt/ObjectSpecificationDefault.java | 12 +-
.../specimpl/ObjectActionMixedInTest.java | 44 ++
...ParameterAbstractTest_getId_and_getName.java | 5 +-
.../runtime/system/ObjectActionDefaultTest.java | 107 ++++
.../runtime/system/ObjectActionImplTest.java | 107 ----
.../system/OneToManyAssociationDefaultTest.java | 188 +++++++
.../system/OneToManyAssociationImplTest.java | 188 -------
...WrapperFactoryDefaultTest_wrappedObject.java | 4 +-
26 files changed, 1692 insertions(+), 1687 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringExtensions.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringExtensions.java b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringExtensions.java
index 76b7f2d..8c3dfb7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringExtensions.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/commons/lang/StringExtensions.java
@@ -560,7 +560,9 @@ public final class StringExtensions {
}
public static String asCapitalizedName(final String extendee) {
- return Character.toUpperCase(extendee.charAt(0)) + extendee.substring(1);
+
+ return Character.toUpperCase(extendee.charAt(0)) +
+ extendee.substring(1);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
index fe1a5df..117d2e4 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
@@ -19,13 +19,15 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+
import com.google.common.collect.Lists;
+
import org.apache.isis.applib.Identifier;
-import org.apache.isis.applib.services.actinvoc.ActionInvocationContext;
import org.apache.isis.applib.annotation.Bulk;
import org.apache.isis.applib.annotation.InvokedOn;
import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.filter.Filter;
+import org.apache.isis.applib.services.actinvoc.ActionInvocationContext;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.command.Command;
import org.apache.isis.applib.services.command.Command.Executor;
@@ -39,8 +41,8 @@ import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
-import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
+import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.interactions.UsabilityContext;
import org.apache.isis.core.metamodel.interactions.VisibilityContext;
@@ -49,10 +51,10 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
-public class ObjectActionContributee extends ObjectActionImpl implements ContributeeMember2 {
+public class ObjectActionContributee extends ObjectActionDefault implements ContributeeMember2 {
private final Object servicePojo;
- private final ObjectActionImpl serviceAction;
+ private final ObjectActionDefault serviceAction;
private final int contributeeParam;
private final ObjectSpecification contributeeType;
@@ -75,7 +77,7 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
*/
public ObjectActionContributee(
final Object servicePojo,
- final ObjectActionImpl serviceAction,
+ final ObjectActionDefault serviceAction,
final int contributeeParam,
final ObjectSpecification contributeeType,
final ObjectMemberDependencies objectMemberDependencies) {
@@ -132,9 +134,10 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
// skip so is omitted from the Contributed action
continue;
}
-
- final ObjectActionParameterAbstract serviceParameter =
+
+ final ObjectActionParameterAbstract serviceParameter =
(ObjectActionParameterAbstract) serviceParameters.get(serviceParamNum);
+
final ObjectActionParameterContributee contributedParam;
contributedParam = new OneToOneActionParameterContributee(
getServiceAdapter(), serviceParameter,
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
new file mode 100644
index 0000000..7060cf1
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionDefault.java
@@ -0,0 +1,531 @@
+/*
+ * 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.specloader.specimpl;
+
+import java.util.List;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.isis.applib.RecoverableException;
+import org.apache.isis.applib.annotation.ActionSemantics;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.applib.filter.Filter;
+import org.apache.isis.core.commons.debug.DebugString;
+import org.apache.isis.core.commons.exceptions.UnknownTypeException;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.consent.InteractionResultSet;
+import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
+import org.apache.isis.core.metamodel.facets.TypedHolder;
+import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
+import org.apache.isis.core.metamodel.facets.actions.debug.DebugFacet;
+import org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet;
+import org.apache.isis.core.metamodel.facets.actions.exploration.ExplorationFacet;
+import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
+import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
+import org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacet;
+import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
+import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
+import org.apache.isis.core.metamodel.interactions.ActionInvocationContext;
+import org.apache.isis.core.metamodel.interactions.ActionUsabilityContext;
+import org.apache.isis.core.metamodel.interactions.ActionVisibilityContext;
+import org.apache.isis.core.metamodel.interactions.InteractionUtils;
+import org.apache.isis.core.metamodel.interactions.UsabilityContext;
+import org.apache.isis.core.metamodel.interactions.ValidityContext;
+import org.apache.isis.core.metamodel.interactions.VisibilityContext;
+import org.apache.isis.core.metamodel.spec.ActionType;
+import org.apache.isis.core.metamodel.spec.DomainModelException;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
+
+public class ObjectActionDefault extends ObjectMemberAbstract implements ObjectAction {
+
+ private final static Logger LOG = LoggerFactory.getLogger(ObjectActionDefault.class);
+
+ public static ActionType getType(final String typeStr) {
+ final ActionType type = ActionType.valueOf(typeStr);
+ if (type == null) {
+ throw new IllegalArgumentException();
+ }
+ return type;
+ }
+
+ //region > fields
+
+ /**
+ * Lazily initialized by {@link #getParameters()} (so don't use directly!)
+ */
+ private List<ObjectActionParameter> parameters;
+
+ //endregion
+
+ //region > constructors
+
+ public ObjectActionDefault(
+ final FacetedMethod facetedMethod,
+ final ObjectMemberDependencies objectMemberDependencies) {
+ super(facetedMethod, FeatureType.ACTION, objectMemberDependencies);
+ }
+
+ //endregion
+
+ //region > ReturnType, OnType, Actions (set)
+ /**
+ * Always returns <tt>null</tt>.
+ */
+ @Override
+ public ObjectSpecification getSpecification() {
+ return null;
+ }
+
+ @Override
+ public ObjectSpecification getReturnType() {
+ final ActionInvocationFacet facet = getActionInvocationFacet();
+ return facet.getReturnType();
+ }
+
+ /**
+ * Returns true if the represented action returns something, else returns
+ * false.
+ */
+ @Override
+ public boolean hasReturn() {
+ if(getReturnType() == null) {
+ // this shouldn't happen; return Type always defined, even if represents void.class
+ return false;
+ }
+ return getReturnType() != getSpecificationLoader().loadSpecification(void.class);
+ }
+
+
+ @Override
+ public ObjectSpecification getOnType() {
+ final ActionInvocationFacet facet = getActionInvocationFacet();
+ return facet.getOnType();
+ }
+
+ @Override
+ public ActionSemantics.Of getSemantics() {
+ final ActionSemanticsFacet facet = getFacet(ActionSemanticsFacet.class);
+ return facet != null? facet.value(): ActionSemantics.Of.NON_IDEMPOTENT;
+ }
+
+ //endregion
+
+ //region > Type
+ @Override
+ public ActionType getType() {
+ return getType(this);
+ }
+
+ private static ActionType getType(final FacetHolder facetHolder) {
+ Facet facet = facetHolder.getFacet(DebugFacet.class);
+ if (facet != null) {
+ return ActionType.DEBUG;
+ }
+ facet = facetHolder.getFacet(ExplorationFacet.class);
+ if (facet != null) {
+ return ActionType.EXPLORATION;
+ }
+ facet = facetHolder.getFacet(PrototypeFacet.class);
+ if (facet != null) {
+ return ActionType.PROTOTYPE;
+ }
+ return ActionType.USER;
+ }
+ //endregion
+
+ //region > Parameters
+
+ @Override
+ public int getParameterCount() {
+ return getFacetedMethod().getParameters().size();
+ }
+
+ @Override
+ public boolean promptForParameters(final ObjectAdapter target) {
+ return getParameterCount() != 0;
+ }
+
+ /**
+ * Build lazily by {@link #getParameters()}.
+ *
+ * <p>
+ * Although this is lazily loaded, the method is also <tt>synchronized</tt>
+ * so there shouldn't be any thread race conditions.
+ */
+ @Override
+ public synchronized List<ObjectActionParameter> getParameters() {
+ if (this.parameters == null) {
+ final int parameterCount = getParameterCount();
+ final List<ObjectActionParameter> parameters = Lists.newArrayList();
+ final List<FacetedMethodParameter> paramPeers = getFacetedMethod().getParameters();
+ for (int i = 0; i < parameterCount; i++) {
+ final TypedHolder paramPeer = paramPeers.get(i);
+ final ObjectSpecification specification = ObjectMemberAbstract.getSpecification(getSpecificationLoader(), paramPeer.getType());
+
+ if (!specification.isNotCollection()) {
+ throw new UnknownTypeException("collections not supported as parameters: " + getIdentifier());
+ }
+ final ObjectActionParameter parameter = new OneToOneActionParameterDefault(i, this, paramPeer);
+ parameters.add(parameter);
+ }
+ this.parameters = parameters;
+ }
+ return parameters;
+ }
+
+ @Override
+ public synchronized List<ObjectSpecification> getParameterTypes() {
+ final List<ObjectSpecification> parameterTypes = Lists.newArrayList();
+ final List<ObjectActionParameter> parameters = getParameters();
+ for (final ObjectActionParameter parameter : parameters) {
+ parameterTypes.add(parameter.getSpecification());
+ }
+ return parameterTypes;
+ }
+
+ @Override
+ public ObjectActionParameter getParameterById(final String paramId) {
+ final List<ObjectActionParameter> allParameters = getParameters();
+ for (int i = 0; i < allParameters.size(); i++) {
+ final ObjectActionParameter param = allParameters.get(i);
+ if (Objects.equal(paramId, param.getId())) {
+ return param;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public ObjectActionParameter getParameterByName(final String paramName) {
+ final List<ObjectActionParameter> allParameters = getParameters();
+ for (int i = 0; i < allParameters.size(); i++) {
+ final ObjectActionParameter param = allParameters.get(i);
+ if (Objects.equal(paramName, param.getName())) {
+ return param;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public List<ObjectActionParameter> getParameters(final Filter<ObjectActionParameter> filter) {
+ final List<ObjectActionParameter> allParameters = getParameters();
+ final List<ObjectActionParameter> selectedParameters = Lists.newArrayList();
+ for (int i = 0; i < allParameters.size(); i++) {
+ if (filter.accept(allParameters.get(i))) {
+ selectedParameters.add(allParameters.get(i));
+ }
+ }
+ return selectedParameters;
+ }
+
+ private ObjectActionParameter getParameter(final int position) {
+ final List<ObjectActionParameter> parameters = getParameters();
+ if (position >= parameters.size()) {
+ throw new IllegalArgumentException("getParameter(int): only " + parameters.size() + " parameters, position=" + position);
+ }
+ return parameters.get(position);
+ }
+
+ //endregion
+
+ //region > visable, usable
+
+ @Override
+ public VisibilityContext<?> createVisibleInteractionContext(
+ final ObjectAdapter targetObjectAdapter, final InteractionInitiatedBy interactionInitiatedBy,
+ Where where) {
+ return new ActionVisibilityContext(targetObjectAdapter, getIdentifier(), interactionInitiatedBy, where);
+ }
+
+ @Override
+ public UsabilityContext<?> createUsableInteractionContext(
+ final ObjectAdapter targetObjectAdapter, final InteractionInitiatedBy interactionInitiatedBy,
+ Where where) {
+ return new ActionUsabilityContext(targetObjectAdapter, getIdentifier(), interactionInitiatedBy, where);
+ }
+ //endregion
+
+ //region > validate
+
+ @Override
+ public Consent isProposedArgumentSetValid(
+ final ObjectAdapter target,
+ final ObjectAdapter[] proposedArguments,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return isProposedArgumentSetValidResultSet(target, proposedArguments, interactionInitiatedBy).createConsent();
+ }
+
+ private InteractionResultSet isProposedArgumentSetValidResultSet(
+ final ObjectAdapter objectAdapter,
+ final ObjectAdapter[] proposedArguments,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+
+ final InteractionResultSet resultSet = new InteractionResultSet();
+ final List<ObjectActionParameter> actionParameters = getParameters();
+ if (proposedArguments != null) {
+ for (int i = 0; i < proposedArguments.length; i++) {
+ final ValidityContext<?> ic =
+ actionParameters.get(i).createProposedArgumentInteractionContext(
+ objectAdapter, proposedArguments, i, interactionInitiatedBy
+ );
+ InteractionUtils.isValidResultSet(getParameter(i), ic, resultSet);
+ }
+ }
+ // only check the action's own validity if all the arguments are OK.
+ if (resultSet.isAllowed()) {
+ final ValidityContext<?> ic = createActionInvocationInteractionContext(
+ objectAdapter, proposedArguments, interactionInitiatedBy);
+ InteractionUtils.isValidResultSet(this, ic, resultSet);
+ }
+ return resultSet;
+ }
+
+ private ActionInvocationContext createActionInvocationInteractionContext(
+ final ObjectAdapter targetObject,
+ final ObjectAdapter[] proposedArguments,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return new ActionInvocationContext(targetObject, getIdentifier(), proposedArguments,
+ interactionInitiatedBy);
+ }
+
+ //endregion
+
+ //region > executeWithRuleChecking, execute
+
+ @Override
+ public ObjectAdapter executeWithRuleChecking(
+ final ObjectAdapter target,
+ final ObjectAdapter[] arguments,
+ final InteractionInitiatedBy interactionInitiatedBy,
+ final Where where) {
+
+ // see it?
+ final Consent visibility = isVisible(target, interactionInitiatedBy, where);
+ if (visibility.isVetoed()) {
+ throw new AuthorizationException();
+ }
+
+ // use it?
+ final Consent usability = isUsable(target, interactionInitiatedBy, where);
+ if(usability.isVetoed()) {
+ throw new AuthorizationException();
+ }
+
+ // do it?
+ final Consent validity = isProposedArgumentSetValid(target, arguments, interactionInitiatedBy);
+ if(validity.isVetoed()) {
+ throw new RecoverableException(validity.getReason());
+ }
+
+ return execute(target, arguments, interactionInitiatedBy);
+ }
+
+ @Override
+ public ObjectAdapter execute(
+ final ObjectAdapter target,
+ final ObjectAdapter[] arguments,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ if(LOG.isDebugEnabled()) {
+ LOG.debug("execute action " + target + "." + getId());
+ }
+ final ActionInvocationFacet facet = getFacet(ActionInvocationFacet.class);
+ return facet.invoke(this, target, arguments,
+ interactionInitiatedBy);
+ }
+
+ protected ActionInvocationFacet getActionInvocationFacet() {
+ return getFacetedMethod().getFacet(ActionInvocationFacet.class);
+ }
+
+
+ //endregion
+
+ //region > defaults
+
+ @Override
+ public ObjectAdapter[] getDefaults(final ObjectAdapter target) {
+
+ final int parameterCount = getParameterCount();
+ final List<ObjectActionParameter> parameters = getParameters();
+
+ final Object[] parameterDefaultPojos;
+
+ final ActionDefaultsFacet facet = getFacet(ActionDefaultsFacet.class);
+ if (!facet.isNoop()) {
+ // use the old defaultXxx approach
+ parameterDefaultPojos = facet.getDefaults(target);
+ if (parameterDefaultPojos.length != parameterCount) {
+ throw new DomainModelException("Defaults array of incompatible size; expected " + parameterCount + " elements, but was " + parameterDefaultPojos.length + " for " + facet);
+ }
+ for (int i = 0; i < parameterCount; i++) {
+ if (parameterDefaultPojos[i] != null) {
+ final ObjectSpecification componentSpec = getSpecificationLoader().loadSpecification(parameterDefaultPojos[i].getClass());
+ final ObjectSpecification parameterSpec = parameters.get(i).getSpecification();
+ if (!componentSpec.isOfType(parameterSpec)) {
+ throw new DomainModelException("Defaults type incompatible with parameter " + (i + 1) + " type; expected " + parameterSpec.getFullIdentifier() + ", but was " + componentSpec.getFullIdentifier());
+ }
+ }
+ }
+ } else {
+ // use the new defaultNXxx approach for each param in turn
+ // (the reflector will have made sure both aren't installed).
+ parameterDefaultPojos = new Object[parameterCount];
+ for (int i = 0; i < parameterCount; i++) {
+ final ActionParameterDefaultsFacet paramFacet = parameters.get(i).getFacet(ActionParameterDefaultsFacet.class);
+ if (paramFacet != null && !paramFacet.isNoop()) {
+ parameterDefaultPojos[i] = paramFacet.getDefault(target, null);
+ } else {
+ parameterDefaultPojos[i] = null;
+ }
+ }
+ }
+
+ final ObjectAdapter[] parameterDefaultAdapters = new ObjectAdapter[parameterCount];
+ if (parameterDefaultPojos != null) {
+ for (int i = 0; i < parameterCount; i++) {
+ parameterDefaultAdapters[i] = adapterFor(parameterDefaultPojos[i]);
+ }
+ }
+
+ return parameterDefaultAdapters;
+ }
+
+ private ObjectAdapter adapterFor(final Object pojo) {
+ return pojo == null ? null : getPersistenceSessionService().adapterFor(pojo);
+ }
+
+ //endregion
+
+ //region > choices
+
+ @Override
+ public ObjectAdapter[][] getChoices(
+ final ObjectAdapter target,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+
+ final int parameterCount = getParameterCount();
+ Object[][] parameterChoicesPojos;
+
+ final ActionChoicesFacet facet = getFacet(ActionChoicesFacet.class);
+ final List<ObjectActionParameter> parameters = getParameters();
+
+ if (!facet.isNoop()) {
+ // using the old choicesXxx() approach
+ parameterChoicesPojos = facet.getChoices(target,
+ interactionInitiatedBy);
+
+ // if no options, or not the right number of pojos, then default
+ if (parameterChoicesPojos == null) {
+ parameterChoicesPojos = new Object[parameterCount][];
+ } else if (parameterChoicesPojos.length != parameterCount) {
+ throw new DomainModelException(
+ String.format("Choices array of incompatible size; expected %d elements, but was %d for %s",
+ parameterCount, parameterChoicesPojos.length, facet));
+ }
+ } else {
+ // use the new choicesNXxx approach for each param in turn
+ // (the reflector will have made sure both aren't installed).
+
+ parameterChoicesPojos = new Object[parameterCount][];
+ for (int i = 0; i < parameterCount; i++) {
+ final ActionParameterChoicesFacet paramFacet = parameters.get(i).getFacet(ActionParameterChoicesFacet.class);
+ if (paramFacet != null && !paramFacet.isNoop()) {
+ parameterChoicesPojos[i] = paramFacet.getChoices(target, null,
+ interactionInitiatedBy);
+ } else {
+ parameterChoicesPojos[i] = new Object[0];
+ }
+ }
+ }
+
+ final ObjectAdapter[][] parameterChoicesAdapters = new ObjectAdapter[parameterCount][];
+ for (int i = 0; i < parameterCount; i++) {
+ final ObjectSpecification paramSpec = parameters.get(i).getSpecification();
+
+ if (parameterChoicesPojos[i] != null && parameterChoicesPojos[i].length > 0) {
+ ObjectActionParameterAbstract.checkChoicesOrAutoCompleteType(
+ getSpecificationLoader(), parameterChoicesPojos[i], paramSpec);
+ parameterChoicesAdapters[i] = new ObjectAdapter[parameterChoicesPojos[i].length];
+ for (int j = 0; j < parameterChoicesPojos[i].length; j++) {
+ parameterChoicesAdapters[i][j] = adapterFor(parameterChoicesPojos[i][j]);
+ }
+ } else if (paramSpec.isNotCollection()) {
+ parameterChoicesAdapters[i] = new ObjectAdapter[0];
+ } else {
+ throw new UnknownTypeException(paramSpec);
+ }
+
+ if (parameterChoicesAdapters[i].length == 0) {
+ parameterChoicesAdapters[i] = null;
+ }
+ }
+
+ return parameterChoicesAdapters;
+ }
+
+ //endregion
+
+ //region > debug, toString
+
+ @Override
+ public String debugData() {
+ final DebugString debugString = new DebugString();
+ getFacetedMethod().debugData(debugString);
+ return debugString.toString();
+ }
+
+ @Override
+ public String toString() {
+ final StringBuffer sb = new StringBuffer();
+ sb.append("Action [");
+ sb.append(super.toString());
+ sb.append(",type=");
+ sb.append(getType());
+ sb.append(",returns=");
+ sb.append(getReturnType());
+ sb.append(",parameters={");
+ for (int i = 0; i < getParameterCount(); i++) {
+ if (i > 0) {
+ sb.append(",");
+ }
+ sb.append(getParameters().get(i).getSpecification().getShortIdentifier());
+ }
+ sb.append("}]");
+ return sb.toString();
+ }
+
+ //endregion
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
deleted file mode 100644
index ae38776..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- * 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.specloader.specimpl;
-
-import java.util.List;
-
-import com.google.common.base.Objects;
-import com.google.common.collect.Lists;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import org.apache.isis.applib.RecoverableException;
-import org.apache.isis.applib.annotation.ActionSemantics;
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.filter.Filter;
-import org.apache.isis.core.commons.debug.DebugString;
-import org.apache.isis.core.commons.exceptions.UnknownTypeException;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.consent.InteractionResultSet;
-import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
-import org.apache.isis.core.metamodel.facets.TypedHolder;
-import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
-import org.apache.isis.core.metamodel.facets.actions.debug.DebugFacet;
-import org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet;
-import org.apache.isis.core.metamodel.facets.actions.exploration.ExplorationFacet;
-import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
-import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
-import org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacet;
-import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
-import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
-import org.apache.isis.core.metamodel.interactions.ActionInvocationContext;
-import org.apache.isis.core.metamodel.interactions.ActionUsabilityContext;
-import org.apache.isis.core.metamodel.interactions.ActionVisibilityContext;
-import org.apache.isis.core.metamodel.interactions.InteractionUtils;
-import org.apache.isis.core.metamodel.interactions.UsabilityContext;
-import org.apache.isis.core.metamodel.interactions.ValidityContext;
-import org.apache.isis.core.metamodel.interactions.VisibilityContext;
-import org.apache.isis.core.metamodel.spec.ActionType;
-import org.apache.isis.core.metamodel.spec.DomainModelException;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
-import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
-
-public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectAction {
-
- private final static Logger LOG = LoggerFactory.getLogger(ObjectActionImpl.class);
-
- public static ActionType getType(final String typeStr) {
- final ActionType type = ActionType.valueOf(typeStr);
- if (type == null) {
- throw new IllegalArgumentException();
- }
- return type;
- }
-
- //region > fields
-
- /**
- * Lazily initialized by {@link #getParameters()} (so don't use directly!)
- */
- private List<ObjectActionParameter> parameters;
-
- //endregion
-
- //region > constructors
-
- public ObjectActionImpl(final FacetedMethod facetedMethod, final ObjectMemberDependencies objectMemberDependencies) {
- super(facetedMethod, FeatureType.ACTION, objectMemberDependencies);
- }
-
- //endregion
-
- //region > ReturnType, OnType, Actions (set)
- /**
- * Always returns <tt>null</tt>.
- */
- @Override
- public ObjectSpecification getSpecification() {
- return null;
- }
-
- @Override
- public ObjectSpecification getReturnType() {
- final ActionInvocationFacet facet = getActionInvocationFacet();
- return facet.getReturnType();
- }
-
- /**
- * Returns true if the represented action returns something, else returns
- * false.
- */
- @Override
- public boolean hasReturn() {
- if(getReturnType() == null) {
- // this shouldn't happen; return Type always defined, even if represents void.class
- return false;
- }
- return getReturnType() != getSpecificationLoader().loadSpecification(void.class);
- }
-
-
- @Override
- public ObjectSpecification getOnType() {
- final ActionInvocationFacet facet = getActionInvocationFacet();
- return facet.getOnType();
- }
-
- @Override
- public ActionSemantics.Of getSemantics() {
- final ActionSemanticsFacet facet = getFacet(ActionSemanticsFacet.class);
- return facet != null? facet.value(): ActionSemantics.Of.NON_IDEMPOTENT;
- }
-
- //endregion
-
- //region > Type
- @Override
- public ActionType getType() {
- return getType(this);
- }
-
- private static ActionType getType(final FacetHolder facetHolder) {
- Facet facet = facetHolder.getFacet(DebugFacet.class);
- if (facet != null) {
- return ActionType.DEBUG;
- }
- facet = facetHolder.getFacet(ExplorationFacet.class);
- if (facet != null) {
- return ActionType.EXPLORATION;
- }
- facet = facetHolder.getFacet(PrototypeFacet.class);
- if (facet != null) {
- return ActionType.PROTOTYPE;
- }
- return ActionType.USER;
- }
- //endregion
-
- //region > Parameters
-
- @Override
- public int getParameterCount() {
- return getFacetedMethod().getParameters().size();
- }
-
- @Override
- public boolean promptForParameters(final ObjectAdapter target) {
- return getParameterCount() != 0;
- }
-
- /**
- * Build lazily by {@link #getParameters()}.
- *
- * <p>
- * Although this is lazily loaded, the method is also <tt>synchronized</tt>
- * so there shouldn't be any thread race conditions.
- */
- @Override
- public synchronized List<ObjectActionParameter> getParameters() {
- if (this.parameters == null) {
- final int parameterCount = getParameterCount();
- final List<ObjectActionParameter> parameters = Lists.newArrayList();
- final List<FacetedMethodParameter> paramPeers = getFacetedMethod().getParameters();
- for (int i = 0; i < parameterCount; i++) {
- final TypedHolder paramPeer = paramPeers.get(i);
- final ObjectSpecification specification = ObjectMemberAbstract.getSpecification(getSpecificationLoader(), paramPeer.getType());
-
- final ObjectActionParameter parameter;
- if (specification.isParseable()) {
- parameter = new OneToOneActionParameterImpl(i, this, paramPeer);
- } else if (specification.isNotCollection()) {
- parameter = new OneToOneActionParameterImpl(i, this, paramPeer);
- } else if (specification.isParentedOrFreeCollection()) {
- throw new UnknownTypeException("collections not supported as parameters: " + getIdentifier());
- } else {
- throw new UnknownTypeException(specification);
- }
- parameters.add(parameter);
- }
- this.parameters = parameters;
- }
- return parameters;
- }
-
- @Override
- public synchronized List<ObjectSpecification> getParameterTypes() {
- final List<ObjectSpecification> parameterTypes = Lists.newArrayList();
- final List<ObjectActionParameter> parameters = getParameters();
- for (final ObjectActionParameter parameter : parameters) {
- parameterTypes.add(parameter.getSpecification());
- }
- return parameterTypes;
- }
-
- @Override
- public ObjectActionParameter getParameterById(final String paramId) {
- final List<ObjectActionParameter> allParameters = getParameters();
- for (int i = 0; i < allParameters.size(); i++) {
- final ObjectActionParameter param = allParameters.get(i);
- if (Objects.equal(paramId, param.getId())) {
- return param;
- }
- }
- return null;
- }
-
- @Override
- public ObjectActionParameter getParameterByName(final String paramName) {
- final List<ObjectActionParameter> allParameters = getParameters();
- for (int i = 0; i < allParameters.size(); i++) {
- final ObjectActionParameter param = allParameters.get(i);
- if (Objects.equal(paramName, param.getName())) {
- return param;
- }
- }
- return null;
- }
-
- @Override
- public List<ObjectActionParameter> getParameters(final Filter<ObjectActionParameter> filter) {
- final List<ObjectActionParameter> allParameters = getParameters();
- final List<ObjectActionParameter> selectedParameters = Lists.newArrayList();
- for (int i = 0; i < allParameters.size(); i++) {
- if (filter.accept(allParameters.get(i))) {
- selectedParameters.add(allParameters.get(i));
- }
- }
- return selectedParameters;
- }
-
- private ObjectActionParameter getParameter(final int position) {
- final List<ObjectActionParameter> parameters = getParameters();
- if (position >= parameters.size()) {
- throw new IllegalArgumentException("getParameter(int): only " + parameters.size() + " parameters, position=" + position);
- }
- return parameters.get(position);
- }
-
- //endregion
-
- //region > visable, usable
-
- @Override
- public VisibilityContext<?> createVisibleInteractionContext(
- final ObjectAdapter targetObjectAdapter, final InteractionInitiatedBy interactionInitiatedBy,
- Where where) {
- return new ActionVisibilityContext(targetObjectAdapter, getIdentifier(), interactionInitiatedBy, where);
- }
-
- @Override
- public UsabilityContext<?> createUsableInteractionContext(
- final ObjectAdapter targetObjectAdapter, final InteractionInitiatedBy interactionInitiatedBy,
- Where where) {
- return new ActionUsabilityContext(targetObjectAdapter, getIdentifier(), interactionInitiatedBy, where);
- }
- //endregion
-
- //region > validate
-
- @Override
- public Consent isProposedArgumentSetValid(
- final ObjectAdapter target,
- final ObjectAdapter[] proposedArguments,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return isProposedArgumentSetValidResultSet(target, proposedArguments, interactionInitiatedBy).createConsent();
- }
-
- private InteractionResultSet isProposedArgumentSetValidResultSet(
- final ObjectAdapter objectAdapter,
- final ObjectAdapter[] proposedArguments,
- final InteractionInitiatedBy interactionInitiatedBy) {
-
- final InteractionResultSet resultSet = new InteractionResultSet();
- final List<ObjectActionParameter> actionParameters = getParameters();
- if (proposedArguments != null) {
- for (int i = 0; i < proposedArguments.length; i++) {
- final ValidityContext<?> ic =
- actionParameters.get(i).createProposedArgumentInteractionContext(
- objectAdapter, proposedArguments, i, interactionInitiatedBy
- );
- InteractionUtils.isValidResultSet(getParameter(i), ic, resultSet);
- }
- }
- // only check the action's own validity if all the arguments are OK.
- if (resultSet.isAllowed()) {
- final ValidityContext<?> ic = createActionInvocationInteractionContext(
- objectAdapter, proposedArguments, interactionInitiatedBy);
- InteractionUtils.isValidResultSet(this, ic, resultSet);
- }
- return resultSet;
- }
-
- private ActionInvocationContext createActionInvocationInteractionContext(
- final ObjectAdapter targetObject,
- final ObjectAdapter[] proposedArguments,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return new ActionInvocationContext(targetObject, getIdentifier(), proposedArguments,
- interactionInitiatedBy);
- }
-
- //endregion
-
- //region > executeWithRuleChecking, execute
-
- @Override
- public ObjectAdapter executeWithRuleChecking(
- final ObjectAdapter target,
- final ObjectAdapter[] arguments,
- final InteractionInitiatedBy interactionInitiatedBy,
- final Where where) {
-
- // see it?
- final Consent visibility = isVisible(target, interactionInitiatedBy, where);
- if (visibility.isVetoed()) {
- throw new AuthorizationException();
- }
-
- // use it?
- final Consent usability = isUsable(target, interactionInitiatedBy, where);
- if(usability.isVetoed()) {
- throw new AuthorizationException();
- }
-
- // do it?
- final Consent validity = isProposedArgumentSetValid(target, arguments, interactionInitiatedBy);
- if(validity.isVetoed()) {
- throw new RecoverableException(validity.getReason());
- }
-
- return execute(target, arguments, interactionInitiatedBy);
- }
-
- @Override
- public ObjectAdapter execute(
- final ObjectAdapter target,
- final ObjectAdapter[] arguments,
- final InteractionInitiatedBy interactionInitiatedBy) {
- if(LOG.isDebugEnabled()) {
- LOG.debug("execute action " + target + "." + getId());
- }
- final ActionInvocationFacet facet = getFacet(ActionInvocationFacet.class);
- return facet.invoke(this, target, arguments,
- interactionInitiatedBy);
- }
-
- protected ActionInvocationFacet getActionInvocationFacet() {
- return getFacetedMethod().getFacet(ActionInvocationFacet.class);
- }
-
-
- //endregion
-
- //region > defaults
-
- @Override
- public ObjectAdapter[] getDefaults(final ObjectAdapter target) {
-
- final int parameterCount = getParameterCount();
- final List<ObjectActionParameter> parameters = getParameters();
-
- final Object[] parameterDefaultPojos;
-
- final ActionDefaultsFacet facet = getFacet(ActionDefaultsFacet.class);
- if (!facet.isNoop()) {
- // use the old defaultXxx approach
- parameterDefaultPojos = facet.getDefaults(target);
- if (parameterDefaultPojos.length != parameterCount) {
- throw new DomainModelException("Defaults array of incompatible size; expected " + parameterCount + " elements, but was " + parameterDefaultPojos.length + " for " + facet);
- }
- for (int i = 0; i < parameterCount; i++) {
- if (parameterDefaultPojos[i] != null) {
- final ObjectSpecification componentSpec = getSpecificationLoader().loadSpecification(parameterDefaultPojos[i].getClass());
- final ObjectSpecification parameterSpec = parameters.get(i).getSpecification();
- if (!componentSpec.isOfType(parameterSpec)) {
- throw new DomainModelException("Defaults type incompatible with parameter " + (i + 1) + " type; expected " + parameterSpec.getFullIdentifier() + ", but was " + componentSpec.getFullIdentifier());
- }
- }
- }
- } else {
- // use the new defaultNXxx approach for each param in turn
- // (the reflector will have made sure both aren't installed).
- parameterDefaultPojos = new Object[parameterCount];
- for (int i = 0; i < parameterCount; i++) {
- final ActionParameterDefaultsFacet paramFacet = parameters.get(i).getFacet(ActionParameterDefaultsFacet.class);
- if (paramFacet != null && !paramFacet.isNoop()) {
- parameterDefaultPojos[i] = paramFacet.getDefault(target, null);
- } else {
- parameterDefaultPojos[i] = null;
- }
- }
- }
-
- final ObjectAdapter[] parameterDefaultAdapters = new ObjectAdapter[parameterCount];
- if (parameterDefaultPojos != null) {
- for (int i = 0; i < parameterCount; i++) {
- parameterDefaultAdapters[i] = adapterFor(parameterDefaultPojos[i]);
- }
- }
-
- return parameterDefaultAdapters;
- }
-
- private ObjectAdapter adapterFor(final Object pojo) {
- return pojo == null ? null : getPersistenceSessionService().adapterFor(pojo);
- }
-
- //endregion
-
- //region > choices
-
- @Override
- public ObjectAdapter[][] getChoices(
- final ObjectAdapter target,
- final InteractionInitiatedBy interactionInitiatedBy) {
-
- final int parameterCount = getParameterCount();
- Object[][] parameterChoicesPojos;
-
- final ActionChoicesFacet facet = getFacet(ActionChoicesFacet.class);
- final List<ObjectActionParameter> parameters = getParameters();
-
- if (!facet.isNoop()) {
- // using the old choicesXxx() approach
- parameterChoicesPojos = facet.getChoices(target,
- interactionInitiatedBy);
-
- // if no options, or not the right number of pojos, then default
- if (parameterChoicesPojos == null) {
- parameterChoicesPojos = new Object[parameterCount][];
- } else if (parameterChoicesPojos.length != parameterCount) {
- throw new DomainModelException(
- String.format("Choices array of incompatible size; expected %d elements, but was %d for %s",
- parameterCount, parameterChoicesPojos.length, facet));
- }
- } else {
- // use the new choicesNXxx approach for each param in turn
- // (the reflector will have made sure both aren't installed).
-
- parameterChoicesPojos = new Object[parameterCount][];
- for (int i = 0; i < parameterCount; i++) {
- final ActionParameterChoicesFacet paramFacet = parameters.get(i).getFacet(ActionParameterChoicesFacet.class);
- if (paramFacet != null && !paramFacet.isNoop()) {
- parameterChoicesPojos[i] = paramFacet.getChoices(target, null,
- interactionInitiatedBy);
- } else {
- parameterChoicesPojos[i] = new Object[0];
- }
- }
- }
-
- final ObjectAdapter[][] parameterChoicesAdapters = new ObjectAdapter[parameterCount][];
- for (int i = 0; i < parameterCount; i++) {
- final ObjectSpecification paramSpec = parameters.get(i).getSpecification();
-
- if (parameterChoicesPojos[i] != null && parameterChoicesPojos[i].length > 0) {
- ObjectActionParameterAbstract.checkChoicesOrAutoCompleteType(
- getSpecificationLoader(), parameterChoicesPojos[i], paramSpec);
- parameterChoicesAdapters[i] = new ObjectAdapter[parameterChoicesPojos[i].length];
- for (int j = 0; j < parameterChoicesPojos[i].length; j++) {
- parameterChoicesAdapters[i][j] = adapterFor(parameterChoicesPojos[i][j]);
- }
- } else if (paramSpec.isNotCollection()) {
- parameterChoicesAdapters[i] = new ObjectAdapter[0];
- } else {
- throw new UnknownTypeException(paramSpec);
- }
-
- if (parameterChoicesAdapters[i].length == 0) {
- parameterChoicesAdapters[i] = null;
- }
- }
-
- return parameterChoicesAdapters;
- }
-
- //endregion
-
- //region > debug, toString
-
- @Override
- public String debugData() {
- final DebugString debugString = new DebugString();
- getFacetedMethod().debugData(debugString);
- return debugString.toString();
- }
-
- @Override
- public String toString() {
- final StringBuffer sb = new StringBuffer();
- sb.append("Action [");
- sb.append(super.toString());
- sb.append(",type=");
- sb.append(getType());
- sb.append(",returns=");
- sb.append(getReturnType());
- sb.append(",parameters={");
- for (int i = 0; i < getParameterCount(); i++) {
- if (i > 0) {
- sb.append(",");
- }
- sb.append(getParameters().get(i).getSpecification().getShortIdentifier());
- }
- sb.append("}]");
- return sb.toString();
- }
-
- //endregion
-
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 64b48e7..3f68d8e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -19,6 +19,7 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
import java.util.Collections;
import java.util.List;
+import com.google.common.base.Objects;
import com.google.common.collect.Lists;
import org.apache.isis.applib.Identifier;
@@ -32,6 +33,7 @@ import org.apache.isis.applib.services.command.Command;
import org.apache.isis.applib.services.command.Command.Executor;
import org.apache.isis.applib.services.command.CommandContext;
import org.apache.isis.core.commons.lang.ObjectExtensions;
+import org.apache.isis.core.commons.lang.StringExtensions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
@@ -42,6 +44,7 @@ import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.interactions.UsabilityContext;
@@ -50,7 +53,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
-public class ObjectActionMixedIn extends ObjectActionImpl implements MixedInMember {
+public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInMember {
/**
* The type of the mixin (providing the action), eg annotated with {@link org.apache.isis.applib.annotation.Mixin}.
@@ -58,9 +61,9 @@ public class ObjectActionMixedIn extends ObjectActionImpl implements MixedInMemb
private final Class<?> mixinType;
/**
- * The {@link ObjectActionImpl} for the action being mixed in (ie on the {@link #mixinType}.
+ * The {@link ObjectActionDefault} for the action being mixed in (ie on the {@link #mixinType}.
*/
- private final ObjectActionImpl mixinAction;
+ private final ObjectActionDefault mixinAction;
/**
* The domain object type being mixed in to (being supplemented).
@@ -81,7 +84,7 @@ public class ObjectActionMixedIn extends ObjectActionImpl implements MixedInMemb
public ObjectActionMixedIn(
final Class<?> mixinType,
- final ObjectActionImpl mixinAction,
+ final ObjectActionDefault mixinAction,
final ObjectSpecification mixedInType,
final ObjectMemberDependencies objectMemberDependencies) {
super(mixinAction.getFacetedMethod(), objectMemberDependencies);
@@ -90,16 +93,47 @@ public class ObjectActionMixedIn extends ObjectActionImpl implements MixedInMemb
this.mixinAction = mixinAction;
this.mixedInType = mixedInType;
- // copy over facets from mixin type to own.
+ // copy over facets from mixin action to self
FacetUtil.copyFacets(mixinAction.getFacetedMethod(), facetHolder);
+ // adjust name if necessary
+ final String name = getName();
+
+ String memberName = null;
+ if(Objects.equal(name, "_")) {
+ memberName = determineNameFrom(mixinAction);
+ FacetUtil.addFacet(new NamedFacetInferred(memberName, facetHolder));
+ }
+
// calculate the identifier
final Identifier mixinIdentifier = mixinAction.getFacetedMethod().getIdentifier();
- final String memberName = mixinIdentifier.getMemberName();
+ memberName = memberName != null? memberName : mixinIdentifier.getMemberName();
List<String> memberParameterNames = mixinIdentifier.getMemberParameterNames();
identifier = Identifier.actionIdentifier(getOnType().getCorrespondingClass().getName(), memberName, memberParameterNames);
}
+ private static String determineNameFrom(final ObjectActionDefault mixinAction) {
+ return suffixAfterUnderscore(mixinAction.getOnType().getSingularName());
+ }
+
+ static String suffixAfterUnderscore(final String singularName) {
+ return StringExtensions.asCapitalizedName(suffix(singularName));
+ }
+
+ private static String suffix(final String singularName) {
+ if (singularName.endsWith("_")) {
+ if (Objects.equal(singularName, "_")) {
+ return singularName;
+ }
+ return singularName;
+ }
+ final int indexOfUnderscore = singularName.lastIndexOf('_');
+ if (indexOfUnderscore == -1) {
+ return singularName;
+ }
+ return singularName.substring(indexOfUnderscore + 1);
+ }
+
@Override
public ObjectSpecification getOnType() {
return mixedInType;
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 81bff3d..ec23dab 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -39,6 +39,7 @@ import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.consent.InteractionResultSet;
import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
import org.apache.isis.core.metamodel.facets.TypedHolder;
@@ -64,10 +65,10 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
public abstract class ObjectActionParameterAbstract implements ObjectActionParameter {
private final int number;
- private final ObjectActionImpl parentAction;
+ private final ObjectActionDefault parentAction;
private final TypedHolder peer;
- protected ObjectActionParameterAbstract(final int number, final ObjectActionImpl objectAction, final TypedHolder peer) {
+ protected ObjectActionParameterAbstract(final int number, final ObjectActionDefault objectAction, final TypedHolder peer) {
this.number = number;
this.parentAction = objectAction;
this.peer = peer;
@@ -198,57 +199,70 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
//region > FacetHolder
+ protected FacetHolder getFacetHolder() {
+ return peer;
+ }
+
@Override
public boolean containsFacet(final Class<? extends Facet> facetType) {
- return peer != null && peer.containsFacet(facetType);
+ final FacetHolder facetHolder = getFacetHolder();
+ return facetHolder != null && facetHolder.containsFacet(facetType);
}
@Override
public boolean containsDoOpFacet(final Class<? extends Facet> facetType) {
- return peer != null && peer.containsDoOpFacet(facetType);
+ final FacetHolder facetHolder = getFacetHolder();
+ return facetHolder != null && facetHolder.containsDoOpFacet(facetType);
}
@Override
public <T extends Facet> T getFacet(final Class<T> cls) {
- return peer != null ? peer.getFacet(cls) : null;
+ final FacetHolder facetHolder = getFacetHolder();
+ return facetHolder != null ? facetHolder.getFacet(cls) : null;
}
@SuppressWarnings("unchecked")
@Override
public Class<? extends Facet>[] getFacetTypes() {
- return peer != null ? peer.getFacetTypes() : new Class[] {};
+ final FacetHolder facetHolder = getFacetHolder();
+ return facetHolder != null ? facetHolder.getFacetTypes() : new Class[] {};
}
@Override
public List<Facet> getFacets(final Filter<Facet> filter) {
- return peer != null ? peer.getFacets(filter) : Lists.<Facet> newArrayList();
+ final FacetHolder facetHolder = getFacetHolder();
+ return facetHolder != null ? facetHolder.getFacets(filter) : Lists.<Facet> newArrayList();
}
@Override
public void addFacet(final Facet facet) {
- if (peer != null) {
- peer.addFacet(facet);
+ final FacetHolder facetHolder = getFacetHolder();
+ if (facetHolder != null) {
+ facetHolder.addFacet(facet);
}
}
@Override
public void addFacet(final MultiTypedFacet facet) {
- if (peer != null) {
- peer.addFacet(facet);
+ final FacetHolder facetHolder = getFacetHolder();
+ if (facetHolder != null) {
+ facetHolder.addFacet(facet);
}
}
@Override
public void removeFacet(final Facet facet) {
- if (peer != null) {
- peer.removeFacet(facet);
+ final FacetHolder facetHolder = getFacetHolder();
+ if (facetHolder != null) {
+ facetHolder.removeFacet(facet);
}
}
@Override
public void removeFacet(final Class<? extends Facet> facetType) {
- if (peer != null) {
- peer.removeFacet(facetType);
+ final FacetHolder facetHolder = getFacetHolder();
+ if (facetHolder != null) {
+ facetHolder.removeFacet(facetType);
}
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index 57eb6fb..85ba2f3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -31,6 +31,7 @@ import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.consent.InteractionResult;
import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
@@ -96,13 +97,6 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
return id;
}
- /**
- * @return the facetedMethod
- */
- public FacetedMethod getFacetedMethod() {
- return facetedMethod;
- }
-
@Override
public Identifier getIdentifier() {
return getFacetedMethod().getIdentifier();
@@ -117,49 +111,57 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
//region > Facets
+ public FacetedMethod getFacetedMethod() {
+ return facetedMethod;
+ }
+
+ protected FacetHolder getFacetHolder() {
+ return getFacetedMethod();
+ }
+
@Override
public boolean containsFacet(final Class<? extends Facet> facetType) {
- return getFacetedMethod().containsFacet(facetType);
+ return getFacetHolder().containsFacet(facetType);
}
@Override
public boolean containsDoOpFacet(final Class<? extends Facet> facetType) {
- return getFacetedMethod().containsDoOpFacet(facetType);
+ return getFacetHolder().containsDoOpFacet(facetType);
}
@Override
public <T extends Facet> T getFacet(final Class<T> cls) {
- return getFacetedMethod().getFacet(cls);
+ return getFacetHolder().getFacet(cls);
}
@Override
public Class<? extends Facet>[] getFacetTypes() {
- return getFacetedMethod().getFacetTypes();
+ return getFacetHolder().getFacetTypes();
}
@Override
public List<Facet> getFacets(final Filter<Facet> filter) {
- return getFacetedMethod().getFacets(filter);
+ return getFacetHolder().getFacets(filter);
}
@Override
public void addFacet(final Facet facet) {
- getFacetedMethod().addFacet(facet);
+ getFacetHolder().addFacet(facet);
}
@Override
public void addFacet(final MultiTypedFacet facet) {
- getFacetedMethod().addFacet(facet);
+ getFacetHolder().addFacet(facet);
}
@Override
public void removeFacet(final Facet facet) {
- getFacetedMethod().removeFacet(facet);
+ getFacetHolder().removeFacet(facet);
}
@Override
public void removeFacet(final Class<? extends Facet> facetType) {
- getFacetedMethod().removeFacet(facetType);
+ getFacetHolder().removeFacet(facetType);
}
//endregion
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 7d60490..f7968a3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -870,7 +870,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
final List<ObjectAction> serviceActions = specification.getObjectActions(ActionType.USER, Contributed.INCLUDED, Filters
.<ObjectAction>any());
- final List<ObjectActionImpl> contributedActions = Lists.newArrayList();
+ final List<ObjectActionDefault> contributedActions = Lists.newArrayList();
for (final ObjectAction serviceAction : serviceActions) {
if (isAlwaysHidden(serviceAction)) {
continue;
@@ -885,25 +885,25 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
if (serviceAction.getParameterCount() != 1 || contributeeParameterMatchOf(serviceAction) == -1) {
continue;
}
- if(!(serviceAction instanceof ObjectActionImpl)) {
+ if(!(serviceAction instanceof ObjectActionDefault)) {
continue;
}
if(!serviceAction.getSemantics().isSafeInNature()) {
continue;
}
- contributedActions.add((ObjectActionImpl) serviceAction);
+ contributedActions.add((ObjectActionDefault) serviceAction);
}
return Lists.newArrayList(Iterables.transform(contributedActions, createContributeeAssociationFunctor(
servicePojo, this)));
}
- private Function<ObjectActionImpl, ObjectAssociation> createContributeeAssociationFunctor(
+ private Function<ObjectActionDefault, ObjectAssociation> createContributeeAssociationFunctor(
final Object servicePojo,
final ObjectSpecification contributeeType) {
- return new Function<ObjectActionImpl, ObjectAssociation>(){
+ return new Function<ObjectActionDefault, ObjectAssociation>(){
@Override
- public ObjectAssociation apply(ObjectActionImpl input) {
+ public ObjectAssociation apply(ObjectActionDefault input) {
final ObjectSpecification returnType = input.getReturnType();
final ObjectAssociationAbstract association = returnType.isNotCollection()
? new OneToOneAssociationContributee(servicePojo, input, contributeeType,
@@ -957,10 +957,10 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
if(notContributed != null && notContributed.toActions()) {
continue;
}
- if(!(serviceAction instanceof ObjectActionImpl)) {
+ if(!(serviceAction instanceof ObjectActionDefault)) {
continue;
}
- final ObjectActionImpl contributedAction = (ObjectActionImpl) serviceAction;
+ final ObjectActionDefault contributedAction = (ObjectActionDefault) serviceAction;
// see if qualifies by inspecting all parameters
final int contributeeParam = contributeeParameterMatchOf(contributedAction);
@@ -1044,10 +1044,10 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
if (isAlwaysHidden(mixinTypeAction)) {
continue;
}
- if(!(mixinTypeAction instanceof ObjectActionImpl)) {
+ if(!(mixinTypeAction instanceof ObjectActionDefault)) {
continue;
}
- final ObjectActionImpl mixinAction = (ObjectActionImpl) mixinTypeAction;
+ final ObjectActionDefault mixinAction = (ObjectActionDefault) mixinTypeAction;
ObjectActionMixedIn mixedInAction =
new ObjectActionMixedIn(mixinType, mixinAction, this, objectMemberDependencies);
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
index 953d4bc..98ed793 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
@@ -21,15 +21,12 @@ import java.util.List;
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.When;
import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.filter.Filter;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetAbstract;
import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
@@ -44,7 +41,7 @@ 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.ObjectMemberDependencies;
-public class OneToManyAssociationContributee extends OneToManyAssociationImpl implements ContributeeMember2 {
+public class OneToManyAssociationContributee extends OneToManyAssociationDefault implements ContributeeMember2 {
private final Object servicePojo;
private final ObjectAction serviceAction;
@@ -58,9 +55,12 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
private final Identifier identifier;
- private static ObjectSpecification typeOfSpec(final ObjectActionImpl objectAction, ObjectMemberDependencies objectMemberDependencies) {
+ private static ObjectSpecification typeOfSpec(
+ final ObjectActionDefault objectAction,
+ final ObjectMemberDependencies objectMemberDependencies) {
+
final TypeOfFacet actionTypeOfFacet = objectAction.getFacet(TypeOfFacet.class);
- SpecificationLoader specificationLookup = objectMemberDependencies.getSpecificationLoader();
+ final SpecificationLoader specificationLookup = objectMemberDependencies.getSpecificationLoader();
// TODO: a bit of a hack; ought really to set up a fallback TypeOfFacetDefault which ensures that there is always
// a TypeOfFacet for any contributee associations created from contributed actions.
Class<? extends Object> cls = actionTypeOfFacet != null? actionTypeOfFacet.value(): Object.class;
@@ -69,10 +69,11 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
public OneToManyAssociationContributee(
final Object servicePojo,
- final ObjectActionImpl serviceAction,
+ final ObjectActionDefault serviceAction,
final ObjectSpecification contributeeType,
final ObjectMemberDependencies objectMemberDependencies) {
- super(serviceAction.getFacetedMethod(), typeOfSpec(serviceAction, objectMemberDependencies),
+ super(serviceAction.getFacetedMethod(),
+ typeOfSpec(serviceAction, objectMemberDependencies),
objectMemberDependencies);
this.servicePojo = servicePojo;
this.serviceAction = serviceAction;
@@ -164,54 +165,18 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
//region > FacetHolder
@Override
- public Class<? extends Facet>[] getFacetTypes() {
- return facetHolder.getFacetTypes();
- }
-
- @Override
- public <T extends Facet> T getFacet(Class<T> cls) {
- return facetHolder.getFacet(cls);
- }
-
- @Override
- public boolean containsFacet(Class<? extends Facet> facetType) {
- return facetHolder.containsFacet(facetType);
- }
-
- @Override
- public boolean containsDoOpFacet(java.lang.Class<? extends Facet> facetType) {
- return facetHolder.containsDoOpFacet(facetType);
- }
-
- @Override
- public List<Facet> getFacets(Filter<Facet> filter) {
- return facetHolder.getFacets(filter);
+ protected FacetHolder getFacetHolder() {
+ return facetHolder;
}
- @Override
- public void addFacet(Facet facet) {
- facetHolder.addFacet(facet);
- }
-
- @Override
- public void addFacet(MultiTypedFacet facet) {
- facetHolder.addFacet(facet);
- }
-
- @Override
- public void removeFacet(Facet facet) {
- facetHolder.removeFacet(facet);
- }
-
- @Override
- public void removeFacet(Class<? extends Facet> facetType) {
- facetHolder.removeFacet(facetType);
- }
+ //endregion
- public ObjectAdapter getServiceAdapter() {
+ private ObjectAdapter getServiceAdapter() {
return getPersistenceSessionService().adapterFor(servicePojo);
}
+ //region > ContributeeMember2 impl (getServiceContributedBy)
+
@Override
public ObjectSpecification getServiceContributedBy() {
return getServiceAdapter().getSpecification();
[03/12] isis git commit: ISIS-1194: deleting ParseableEntryFeature
interface and related classes/modified implementors.
Posted by da...@apache.org.
ISIS-1194: deleting ParseableEntryFeature interface and related classes/modified implementors.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/9961b391
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/9961b391
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/9961b391
Branch: refs/heads/ISIS-1213
Commit: 9961b391645db88032f036e558be76d2bf39061b
Parents: 3fc01b5
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Oct 12 23:50:44 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Oct 12 23:50:44 2015 +0100
----------------------------------------------------------------------
.../feature/ParseableEntryActionParameter.java | 28 ------------
.../spec/feature/ParseableEntryFeature.java | 45 --------------------
.../specimpl/ObjectActionParameterAbstract.java | 6 +--
.../ObjectActionParameterParseable.java | 30 +------------
4 files changed, 4 insertions(+), 105 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/9961b391/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ParseableEntryActionParameter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ParseableEntryActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ParseableEntryActionParameter.java
deleted file mode 100644
index 958ba1a..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ParseableEntryActionParameter.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * 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.spec.feature;
-
-/**
- * Equivalent to {@link ObjectAssociation}, but for parameter rather than
- * properties.
- */
-public interface ParseableEntryActionParameter extends OneToOneActionParameter, ParseableEntryFeature {
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/9961b391/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ParseableEntryFeature.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ParseableEntryFeature.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ParseableEntryFeature.java
deleted file mode 100644
index be86dd1..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ParseableEntryFeature.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * 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.spec.feature;
-
-public interface ParseableEntryFeature extends OneToOneFeature {
-
- /**
- * The typical length of each line for this value, as a number of
- * characters.
- */
- int getTypicalLineLength();
-
- /**
- * Returns the maximum number of characters for a value of this type.
- */
- int getMaximumLength();
-
- /**
- * Returns the number of lines for a multi-line value.
- */
- int getNoLines();
-
- /**
- * Determines if a multi-line value can be wrapped when displayed.
- */
- boolean canWrap();
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/9961b391/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index f43090b..9f664fc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -191,12 +191,12 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
@Override
public boolean containsFacet(final Class<? extends Facet> facetType) {
- return peer != null ? peer.containsFacet(facetType) : false;
+ return peer != null && peer.containsFacet(facetType);
}
@Override
public boolean containsDoOpFacet(final Class<? extends Facet> facetType) {
- return peer == null ? false : peer.containsDoOpFacet(facetType);
+ return peer != null && peer.containsDoOpFacet(facetType);
}
@Override
@@ -332,7 +332,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
addAllInstancesForType(adapters);
}
*/
- return adapters.toArray(new ObjectAdapter[0]);
+ return adapters.toArray(new ObjectAdapter[adapters.size()]);
}
// /////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/9961b391/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
index 70fa8ef..40318c2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
@@ -25,45 +25,17 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.TypedHolder;
-import org.apache.isis.core.metamodel.facets.objectvalue.maxlen.MaxLengthFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.multiline.MultiLineFacet;
import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
-import org.apache.isis.core.metamodel.facets.objectvalue.typicallen.TypicalLengthFacet;
import org.apache.isis.core.metamodel.spec.Instance;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
-import org.apache.isis.core.metamodel.spec.feature.ParseableEntryActionParameter;
-public class ObjectActionParameterParseable extends ObjectActionParameterAbstract implements ParseableEntryActionParameter {
+public class ObjectActionParameterParseable extends ObjectActionParameterAbstract implements OneToOneActionParameter {
public ObjectActionParameterParseable(final int index, final ObjectActionImpl action, final TypedHolder peer) {
super(index, action, peer);
}
- @Override
- public int getNoLines() {
- final MultiLineFacet facet = getFacet(MultiLineFacet.class);
- return facet.numberOfLines();
- }
-
- @Override
- public boolean canWrap() {
- final MultiLineFacet facet = getFacet(MultiLineFacet.class);
- return !facet.preventWrapping();
- }
-
- @Override
- public int getMaximumLength() {
- final MaxLengthFacet facet = getFacet(MaxLengthFacet.class);
- return facet.value();
- }
-
- @Override
- public int getTypicalLineLength() {
- final TypicalLengthFacet facet = getFacet(TypicalLengthFacet.class);
- return facet.value();
- }
-
protected ObjectAdapter doCoerceProposedValue(
final ObjectAdapter adapter,
final Object proposedValue,
[07/12] isis git commit: ISIS-1194: removed the reset of the
ObjectActionParameterParseable stuff, plus unused subclasses.
Posted by da...@apache.org.
ISIS-1194: removed the reset of the ObjectActionParameterParseable stuff, plus unused subclasses.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/c62f937d
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/c62f937d
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/c62f937d
Branch: refs/heads/ISIS-1213
Commit: c62f937d0653c6c0ea25ae571350caf56414395b
Parents: e618fdc
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Oct 13 06:44:12 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Oct 13 06:44:12 2015 +0100
----------------------------------------------------------------------
.../specimpl/ObjectActionContributee.java | 14 +---
.../specloader/specimpl/ObjectActionImpl.java | 7 +-
.../specimpl/ObjectActionMixedIn.java | 8 +-
.../ObjectActionParameterParseable.java | 33 --------
...jectActionParameterParseableContributee.java | 86 --------------------
.../ObjectActionParameterParseableMixedIn.java | 59 --------------
.../OneToOneActionParameterContributee.java | 3 -
.../OneToOneActionParameterMixedIn.java | 10 +--
8 files changed, 12 insertions(+), 208 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/c62f937d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
index 7db1bdf..8fcf8d8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
@@ -136,17 +136,9 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
final ObjectActionParameterAbstract serviceParameter =
(ObjectActionParameterAbstract) serviceParameters.get(serviceParamNum);
final ObjectActionParameterContributee contributedParam;
- if(serviceParameter instanceof ObjectActionParameterParseable) {
- contributedParam = new ObjectActionParameterParseableContributee(
- getServiceAdapter(), serviceAction, serviceParameter, serviceParamNum,
- contributeeParamNum, this);
- } else if(serviceParameter instanceof OneToOneActionParameterImpl) {
- contributedParam = new OneToOneActionParameterContributee(
- getServiceAdapter(), serviceAction, serviceParameter, serviceParamNum,
- contributeeParamNum, this);
- } else {
- throw new RuntimeException("Unknown implementation of ObjectActionParameter; " + serviceParameter.getClass().getName());
- }
+ contributedParam = new OneToOneActionParameterContributee(
+ getServiceAdapter(), serviceAction, serviceParameter, serviceParamNum,
+ contributeeParamNum, this);
contributeeParameters.add(contributedParam);
contributeeParamNum++;
http://git-wip-us.apache.org/repos/asf/isis/blob/c62f937d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
index 02e63a9..cdc0d56 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
@@ -43,13 +43,13 @@ import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.FacetedMethodParameter;
import org.apache.isis.core.metamodel.facets.TypedHolder;
-import org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacet;
+import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
import org.apache.isis.core.metamodel.facets.actions.debug.DebugFacet;
import org.apache.isis.core.metamodel.facets.actions.defaults.ActionDefaultsFacet;
import org.apache.isis.core.metamodel.facets.actions.exploration.ExplorationFacet;
-import org.apache.isis.core.metamodel.facets.actions.action.invocation.ActionInvocationFacet;
import org.apache.isis.core.metamodel.facets.actions.prototype.PrototypeFacet;
import org.apache.isis.core.metamodel.facets.actions.semantics.ActionSemanticsFacet;
+import org.apache.isis.core.metamodel.facets.param.choices.ActionChoicesFacet;
import org.apache.isis.core.metamodel.facets.param.choices.ActionParameterChoicesFacet;
import org.apache.isis.core.metamodel.facets.param.defaults.ActionParameterDefaultsFacet;
import org.apache.isis.core.metamodel.interactions.ActionInvocationContext;
@@ -61,7 +61,6 @@ import org.apache.isis.core.metamodel.interactions.ValidityContext;
import org.apache.isis.core.metamodel.interactions.VisibilityContext;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.DomainModelException;
-import org.apache.isis.core.metamodel.spec.Instance;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
@@ -196,7 +195,7 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
final ObjectActionParameter parameter;
if (specification.isParseable()) {
- parameter = new ObjectActionParameterParseable(i, this, paramPeer);
+ parameter = new OneToOneActionParameterImpl(i, this, paramPeer);
} else if (specification.isNotCollection()) {
parameter = new OneToOneActionParameterImpl(i, this, paramPeer);
} else if (specification.isParentedOrFreeCollection()) {
http://git-wip-us.apache.org/repos/asf/isis/blob/c62f937d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 8e113a5..9574080 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -121,13 +121,7 @@ public class ObjectActionMixedIn extends ObjectActionImpl implements MixedInMemb
final ObjectActionParameterAbstract mixinParameter =
(ObjectActionParameterAbstract) mixinActionParameters.get(paramNum);
final ObjectActionParameterMixedIn mixedInParameter;
- if(mixinParameter instanceof ObjectActionParameterParseable) {
- mixedInParameter = new ObjectActionParameterParseableMixedIn(mixinParameter, this);
- } else if(mixinParameter instanceof OneToOneActionParameterImpl) {
- mixedInParameter = new OneToOneActionParameterMixedIn(mixinParameter, this);
- } else {
- throw new RuntimeException("Unknown implementation of ObjectActionParameter; " + mixinParameter.getClass().getName());
- }
+ mixedInParameter = new OneToOneActionParameterMixedIn(mixinParameter, this);
mixedInParameters.add(mixedInParameter);
}
this.parameters = mixedInParameters;
http://git-wip-us.apache.org/repos/asf/isis/blob/c62f937d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
deleted file mode 100644
index 8d44071..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.specloader.specimpl;
-
-import org.apache.isis.core.metamodel.facets.TypedHolder;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
-
-public class ObjectActionParameterParseable extends ObjectActionParameterAbstract implements OneToOneActionParameter {
-
- public ObjectActionParameterParseable(final int index, final ObjectActionImpl action, final TypedHolder peer) {
- super(index, action, peer);
- }
-
-
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/c62f937d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
deleted file mode 100644
index d70de92..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableContributee.java
+++ /dev/null
@@ -1,86 +0,0 @@
-/**
- * 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.specloader.specimpl;
-
-import java.util.List;
-
-import org.apache.isis.core.commons.authentication.AuthenticationSession;
-import org.apache.isis.core.commons.lang.ListExtensions;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.deployment.DeploymentCategory;
-import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-
-/**
- * REVIEW: this is a bit hacky having 'Contributed' subtypes of both {@link ObjectActionParameterParseable} and also
- * {@link OneToOneActionParameterImpl}. However, the {@link ObjectActionParameterParseable parseable} version
- * only seems to be used by the DnD viewer; Scimpi, Wicket and RO do not. So, we could hopefully simplify the
- * hierarchy at some point.
- */
-public class ObjectActionParameterParseableContributee extends ObjectActionParameterParseable implements ObjectActionParameterContributee {
-
- private final ObjectAdapter serviceAdapter;
- @SuppressWarnings("unused")
- private final ObjectActionImpl serviceAction;
- private final ObjectActionParameter serviceActionParameter;
- @SuppressWarnings("unused")
- private final int serviceParamNumber;
- @SuppressWarnings("unused")
- private final int contributeeParamNumber;
- private final ObjectActionContributee contributeeAction;
-
- public ObjectActionParameterParseableContributee(
- final ObjectAdapter serviceAdapter,
- final ObjectActionImpl serviceAction,
- final ObjectActionParameterAbstract serviceActionParameter,
- final int serviceParamNumber,
- final int contributeeParamNumber,
- final ObjectActionContributee contributeeAction) {
- super(contributeeParamNumber, contributeeAction, serviceActionParameter.getPeer());
- this.serviceAdapter = serviceAdapter;
- this.serviceAction = serviceAction;
- this.serviceActionParameter = serviceActionParameter;
- this.serviceParamNumber = serviceParamNumber;
- this.contributeeParamNumber = contributeeParamNumber;
- this.contributeeAction = contributeeAction;
- }
-
- @Override
- public ObjectAdapter[] getAutoComplete(
- final ObjectAdapter adapter,
- final String searchArg,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return serviceActionParameter.getAutoComplete(serviceAdapter, searchArg,
- interactionInitiatedBy);
- }
-
- protected ObjectAdapter targetForDefaultOrChoices(ObjectAdapter adapter, final List<ObjectAdapter> argumentsIfAvailable) {
- return serviceAdapter;
- }
-
- protected List<ObjectAdapter> argsForDefaultOrChoices(final ObjectAdapter contributee, final List<ObjectAdapter> argumentsIfAvailable) {
-
- final List<ObjectAdapter> suppliedArgs = ListExtensions.mutableCopy(argumentsIfAvailable);
-
- final int contributeeParam = contributeeAction.getContributeeParam();
- ListExtensions.insert(suppliedArgs, contributeeParam, contributee);
-
- return suppliedArgs;
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/c62f937d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableMixedIn.java
deleted file mode 100644
index 333487a..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableMixedIn.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/**
- * 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.specloader.specimpl;
-
-import java.util.List;
-
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-
-/**
- * REVIEW: this is a bit hacky having 'Contributed' subtypes of both {@link ObjectActionParameterParseable} and also
- * {@link OneToOneActionParameterImpl}. However, the {@link ObjectActionParameterParseable parseable} version
- * only seems to be used by the DnD viewer; Scimpi, Wicket and RO do not. So, we could hopefully simplify the
- * hierarchy at some point.
- */
-public class ObjectActionParameterParseableMixedIn extends ObjectActionParameterParseable implements ObjectActionParameterMixedIn {
-
- private final ObjectActionParameterAbstract mixinParameter;
- private final ObjectActionMixedIn objectActionMixedIn;
-
- public ObjectActionParameterParseableMixedIn(
- final ObjectActionParameterAbstract mixinParameter,
- final ObjectActionMixedIn objectActionMixedIn) {
- super(mixinParameter.getNumber(), objectActionMixedIn, mixinParameter.getPeer());
- this.mixinParameter = mixinParameter;
- this.objectActionMixedIn = objectActionMixedIn;
- }
-
- @Override
- public ObjectAdapter[] getAutoComplete(
- final ObjectAdapter mixedInAdapter,
- final String searchArg,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return mixinParameter.getAutoComplete(objectActionMixedIn.mixinAdapterFor(mixedInAdapter), searchArg, interactionInitiatedBy);
- }
-
- protected ObjectAdapter targetForDefaultOrChoices(
- final ObjectAdapter mixedInAdapter,
- final List<ObjectAdapter> argumentsIfAvailable) {
- return objectActionMixedIn.mixinAdapterFor(mixedInAdapter);
- }
-
-
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/c62f937d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
index 77ed327..c9df053 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
@@ -26,12 +26,9 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
public class OneToOneActionParameterContributee extends OneToOneActionParameterImpl implements ObjectActionParameterContributee{
private final ObjectAdapter serviceAdapter;
- @SuppressWarnings("unused")
private final ObjectActionImpl serviceAction;
private final ObjectActionParameter serviceActionParameter;
- @SuppressWarnings("unused")
private final int serviceParamNumber;
- @SuppressWarnings("unused")
private final int contributeeParamNumber;
private final ObjectActionContributee contributeeAction;
http://git-wip-us.apache.org/repos/asf/isis/blob/c62f937d/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
index f8e12a0..d832cf8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
@@ -24,14 +24,14 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
public class OneToOneActionParameterMixedIn extends OneToOneActionParameterImpl implements ObjectActionParameterMixedIn {
- private final ObjectActionParameter mixinActionParameter;
+ private final ObjectActionParameter mixinParameter;
private final ObjectActionMixedIn mixedInAction;
public OneToOneActionParameterMixedIn(
- final ObjectActionParameterAbstract mixinActionParameter,
+ final ObjectActionParameterAbstract mixinParameter,
final ObjectActionMixedIn mixedInAction) {
- super(mixinActionParameter.getNumber(), mixedInAction, mixinActionParameter.getPeer());
- this.mixinActionParameter = mixinActionParameter;
+ super(mixinParameter.getNumber(), mixedInAction, mixinParameter.getPeer());
+ this.mixinParameter = mixinParameter;
this.mixedInAction = mixedInAction;
}
@@ -40,7 +40,7 @@ public class OneToOneActionParameterMixedIn extends OneToOneActionParameterImpl
final ObjectAdapter mixedInAdapter,
final String searchArg,
final InteractionInitiatedBy interactionInitiatedBy) {
- return mixinActionParameter.getAutoComplete(
+ return mixinParameter.getAutoComplete(
mixinAdapterFor(mixedInAdapter), searchArg,
interactionInitiatedBy);
}
[02/12] isis git commit: ISIS-1213: add in parameters for mix-in
actions.
Posted by da...@apache.org.
ISIS-1213: add in parameters for mix-in actions.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/3fc01b54
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/3fc01b54
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/3fc01b54
Branch: refs/heads/ISIS-1213
Commit: 3fc01b5494391a1aea3010506412d15b0617484d
Parents: 643b394
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Oct 12 23:41:03 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Oct 12 23:41:03 2015 +0100
----------------------------------------------------------------------
.../specimpl/ObjectActionMixedIn.java | 34 ++++++++++-
.../specimpl/ObjectActionParameterMixedIn.java | 23 ++++++++
.../ObjectActionParameterParseableMixedIn.java | 59 ++++++++++++++++++++
.../OneToOneActionParameterMixedIn.java | 59 ++++++++++++++++++++
4 files changed, 173 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/3fc01b54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 42abd39..8e113a5 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -19,6 +19,8 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
import java.util.Collections;
import java.util.List;
+import com.google.common.collect.Lists;
+
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.Bulk;
import org.apache.isis.applib.annotation.InvokedOn;
@@ -29,6 +31,7 @@ import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.command.Command;
import org.apache.isis.applib.services.command.Command.Executor;
import org.apache.isis.applib.services.command.CommandContext;
+import org.apache.isis.core.commons.lang.ObjectExtensions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
@@ -69,6 +72,11 @@ public class ObjectActionMixedIn extends ObjectActionImpl implements MixedInMemb
*/
private final FacetHolder facetHolder = new FacetHolderImpl();
+ /**
+ * Lazily initialized by {@link #getParameters()} (so don't use directly!)
+ */
+ private List<ObjectActionParameterMixedIn> parameters;
+
private final Identifier identifier;
public ObjectActionMixedIn(
@@ -102,7 +110,29 @@ public class ObjectActionMixedIn extends ObjectActionImpl implements MixedInMemb
}
public synchronized List<ObjectActionParameter> getParameters() {
- return mixinAction.getParameters();
+ //return mixinAction.getParameters();
+
+ if (this.parameters == null) {
+ final List<ObjectActionParameter> mixinActionParameters = mixinAction.getParameters();
+ final List<ObjectActionParameterMixedIn> mixedInParameters = Lists.newArrayList();
+
+ for (int paramNum = 0; paramNum < mixinActionParameters.size(); paramNum++ ) {
+
+ final ObjectActionParameterAbstract mixinParameter =
+ (ObjectActionParameterAbstract) mixinActionParameters.get(paramNum);
+ final ObjectActionParameterMixedIn mixedInParameter;
+ if(mixinParameter instanceof ObjectActionParameterParseable) {
+ mixedInParameter = new ObjectActionParameterParseableMixedIn(mixinParameter, this);
+ } else if(mixinParameter instanceof OneToOneActionParameterImpl) {
+ mixedInParameter = new OneToOneActionParameterMixedIn(mixinParameter, this);
+ } else {
+ throw new RuntimeException("Unknown implementation of ObjectActionParameter; " + mixinParameter.getClass().getName());
+ }
+ mixedInParameters.add(mixedInParameter);
+ }
+ this.parameters = mixedInParameters;
+ }
+ return ObjectExtensions.asListT(parameters, ObjectActionParameter.class);
}
@Override
@@ -258,7 +288,7 @@ public class ObjectActionMixedIn extends ObjectActionImpl implements MixedInMemb
// //////////////////////////////////////
- private ObjectAdapter mixinAdapterFor(final ObjectAdapter mixedInAdapter) {
+ ObjectAdapter mixinAdapterFor(final ObjectAdapter mixedInAdapter) {
final ObjectSpecification objectSpecification = getSpecificationLoader().loadSpecification(mixinType);
final MixinFacet mixinFacet = objectSpecification.getFacet(MixinFacet.class);
final Object mixinPojo = mixinFacet.instantiate(mixedInAdapter.getObject());
http://git-wip-us.apache.org/repos/asf/isis/blob/3fc01b54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterMixedIn.java
new file mode 100644
index 0000000..905c075
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterMixedIn.java
@@ -0,0 +1,23 @@
+/**
+ * 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.specloader.specimpl;
+
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+
+public interface ObjectActionParameterMixedIn extends ObjectActionParameter {
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/3fc01b54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableMixedIn.java
new file mode 100644
index 0000000..333487a
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseableMixedIn.java
@@ -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.core.metamodel.specloader.specimpl;
+
+import java.util.List;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+
+/**
+ * REVIEW: this is a bit hacky having 'Contributed' subtypes of both {@link ObjectActionParameterParseable} and also
+ * {@link OneToOneActionParameterImpl}. However, the {@link ObjectActionParameterParseable parseable} version
+ * only seems to be used by the DnD viewer; Scimpi, Wicket and RO do not. So, we could hopefully simplify the
+ * hierarchy at some point.
+ */
+public class ObjectActionParameterParseableMixedIn extends ObjectActionParameterParseable implements ObjectActionParameterMixedIn {
+
+ private final ObjectActionParameterAbstract mixinParameter;
+ private final ObjectActionMixedIn objectActionMixedIn;
+
+ public ObjectActionParameterParseableMixedIn(
+ final ObjectActionParameterAbstract mixinParameter,
+ final ObjectActionMixedIn objectActionMixedIn) {
+ super(mixinParameter.getNumber(), objectActionMixedIn, mixinParameter.getPeer());
+ this.mixinParameter = mixinParameter;
+ this.objectActionMixedIn = objectActionMixedIn;
+ }
+
+ @Override
+ public ObjectAdapter[] getAutoComplete(
+ final ObjectAdapter mixedInAdapter,
+ final String searchArg,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return mixinParameter.getAutoComplete(objectActionMixedIn.mixinAdapterFor(mixedInAdapter), searchArg, interactionInitiatedBy);
+ }
+
+ protected ObjectAdapter targetForDefaultOrChoices(
+ final ObjectAdapter mixedInAdapter,
+ final List<ObjectAdapter> argumentsIfAvailable) {
+ return objectActionMixedIn.mixinAdapterFor(mixedInAdapter);
+ }
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/3fc01b54/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
new file mode 100644
index 0000000..f8e12a0
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
@@ -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.core.metamodel.specloader.specimpl;
+
+import java.util.List;
+
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
+
+public class OneToOneActionParameterMixedIn extends OneToOneActionParameterImpl implements ObjectActionParameterMixedIn {
+
+ private final ObjectActionParameter mixinActionParameter;
+ private final ObjectActionMixedIn mixedInAction;
+
+ public OneToOneActionParameterMixedIn(
+ final ObjectActionParameterAbstract mixinActionParameter,
+ final ObjectActionMixedIn mixedInAction) {
+ super(mixinActionParameter.getNumber(), mixedInAction, mixinActionParameter.getPeer());
+ this.mixinActionParameter = mixinActionParameter;
+ this.mixedInAction = mixedInAction;
+ }
+
+ @Override
+ public ObjectAdapter[] getAutoComplete(
+ final ObjectAdapter mixedInAdapter,
+ final String searchArg,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return mixinActionParameter.getAutoComplete(
+ mixinAdapterFor(mixedInAdapter), searchArg,
+ interactionInitiatedBy);
+ }
+
+ protected ObjectAdapter targetForDefaultOrChoices(
+ final ObjectAdapter mixedInAdapter,
+ final List<ObjectAdapter> argumentsIfAvailable) {
+ return mixinAdapterFor(mixedInAdapter);
+ }
+
+ private ObjectAdapter mixinAdapterFor(final ObjectAdapter mixedInAdapter) {
+ return mixedInAction.mixinAdapterFor(mixedInAdapter);
+ }
+
+
+}
[09/12] isis git commit: ISIS-1213: renamed metamodel classes
("...Impl" to "...Default");
derive name of ObjectActionMixedIn from mixin type (if "_");
simplified logic of #getParameters; also...
Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java
new file mode 100644
index 0000000..ee4253d
--- /dev/null
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationDefaultTest.java
@@ -0,0 +1,188 @@
+/*
+ * 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.runtime.system;
+
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
+import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerService;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.isis.core.metamodel.specloader.specimpl.OneToManyAssociationDefault;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+
+public class OneToManyAssociationDefaultTest {
+
+ private static final String COLLECTION_ID = "orders";
+
+ public static class Customer {
+ }
+
+ public static class Order {
+ }
+
+ private static final Class<?> COLLECTION_TYPE = Order.class;
+
+ @Rule
+ public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
+
+ @Mock
+ private ObjectAdapter mockOwnerAdapter;
+ @Mock
+ private ObjectAdapter mockAssociatedAdapter;
+ @Mock
+ private AuthenticationSessionProvider mockAuthenticationSessionProvider;
+ @Mock
+ private SpecificationLoader mockSpecificationLookup;
+ @Mock
+ private AdapterManager mockAdapterManager;
+ @Mock
+ private MessageBrokerService mockMessageBrokerService;
+ @Mock
+ private PersistenceSessionService mockPersistenceSessionService;
+ @Mock
+ private FacetedMethod mockPeer;
+ @Mock
+ private NamedFacet mockNamedFacet;
+ @Mock
+ private ServicesInjector mockServicesInjector;
+ @Mock
+ private CollectionAddToFacet mockCollectionAddToFacet;
+
+ private OneToManyAssociation association;
+
+ @Before
+ public void setUp() {
+ allowingPeerToReturnCollectionType();
+ allowingPeerToReturnIdentifier();
+ allowingSpecLoaderToReturnSpecs();
+ association = new OneToManyAssociationDefault(mockPeer, new ObjectMemberDependencies(
+ mockSpecificationLookup, mockServicesInjector,
+ mockPersistenceSessionService));
+ }
+
+ private void allowingSpecLoaderToReturnSpecs() {
+ context.checking(new Expectations() {
+ {
+ allowing(mockSpecificationLookup).loadSpecification(Order.class);
+ }
+ });
+ }
+
+ @Test
+ public void id() {
+ assertThat(association.getId(), is(equalTo(COLLECTION_ID)));
+ }
+
+ @Test
+ public void name() {
+ expectPeerToReturnNamedFacet();
+ assertThat(association.getName(), is(equalTo("My name")));
+ }
+
+ @Test
+ public void delegatesToUnderlying() {
+ final ObjectSpecification spec = association.getSpecification();
+ }
+
+ @Test
+ public void canAddPersistable() {
+ context.checking(new Expectations() {
+ {
+ one(mockPeer).containsFacet(NotPersistedFacet.class);
+ will(returnValue(false));
+
+ one(mockOwnerAdapter).representsPersistent();
+ will(returnValue(true));
+
+ one(mockAssociatedAdapter).isTransient();
+ will(returnValue(false));
+
+ one(mockPeer).getFacet(CollectionAddToFacet.class);
+ will(returnValue(mockCollectionAddToFacet));
+
+ one(mockCollectionAddToFacet).add(mockOwnerAdapter, mockAssociatedAdapter, InteractionInitiatedBy.USER);
+ }
+ });
+ association.addElement(mockOwnerAdapter, mockAssociatedAdapter, InteractionInitiatedBy.USER);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void cannotRemoveNull() {
+ association.removeElement(mockOwnerAdapter, null, InteractionInitiatedBy.USER);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void cannotAddNull() {
+ association.addElement(mockOwnerAdapter, null, InteractionInitiatedBy.USER);
+ }
+
+ private void allowingPeerToReturnCollectionType() {
+ context.checking(new Expectations() {
+ {
+ allowing(mockPeer).getType();
+ will(returnValue(COLLECTION_TYPE));
+ }
+ });
+ }
+
+ private void allowingPeerToReturnIdentifier() {
+ context.checking(new Expectations() {
+ {
+ one(mockPeer).getIdentifier();
+ will(returnValue(Identifier.propertyOrCollectionIdentifier(Customer.class, COLLECTION_ID)));
+ }
+ });
+ }
+
+ private void expectPeerToReturnNamedFacet() {
+ context.checking(new Expectations() {
+ {
+ one(mockPeer).getFacet(NamedFacet.class);
+ will(returnValue(mockNamedFacet));
+
+ one(mockNamedFacet).value();
+ will(returnValue("My name"));
+ }
+ });
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
deleted file mode 100644
index c4f082f..0000000
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/OneToManyAssociationImplTest.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * 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.runtime.system;
-
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
-import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerService;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
-import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.isis.core.metamodel.specloader.specimpl.OneToManyAssociationImpl;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertThat;
-
-public class OneToManyAssociationImplTest {
-
- private static final String COLLECTION_ID = "orders";
-
- public static class Customer {
- }
-
- public static class Order {
- }
-
- private static final Class<?> COLLECTION_TYPE = Order.class;
-
- @Rule
- public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
- @Mock
- private ObjectAdapter mockOwnerAdapter;
- @Mock
- private ObjectAdapter mockAssociatedAdapter;
- @Mock
- private AuthenticationSessionProvider mockAuthenticationSessionProvider;
- @Mock
- private SpecificationLoader mockSpecificationLookup;
- @Mock
- private AdapterManager mockAdapterManager;
- @Mock
- private MessageBrokerService mockMessageBrokerService;
- @Mock
- private PersistenceSessionService mockPersistenceSessionService;
- @Mock
- private FacetedMethod mockPeer;
- @Mock
- private NamedFacet mockNamedFacet;
- @Mock
- private ServicesInjector mockServicesInjector;
- @Mock
- private CollectionAddToFacet mockCollectionAddToFacet;
-
- private OneToManyAssociation association;
-
- @Before
- public void setUp() {
- allowingPeerToReturnCollectionType();
- allowingPeerToReturnIdentifier();
- allowingSpecLoaderToReturnSpecs();
- association = new OneToManyAssociationImpl(mockPeer, new ObjectMemberDependencies(
- mockSpecificationLookup, mockServicesInjector,
- mockPersistenceSessionService));
- }
-
- private void allowingSpecLoaderToReturnSpecs() {
- context.checking(new Expectations() {
- {
- allowing(mockSpecificationLookup).loadSpecification(Order.class);
- }
- });
- }
-
- @Test
- public void id() {
- assertThat(association.getId(), is(equalTo(COLLECTION_ID)));
- }
-
- @Test
- public void name() {
- expectPeerToReturnNamedFacet();
- assertThat(association.getName(), is(equalTo("My name")));
- }
-
- @Test
- public void delegatesToUnderlying() {
- final ObjectSpecification spec = association.getSpecification();
- }
-
- @Test
- public void canAddPersistable() {
- context.checking(new Expectations() {
- {
- one(mockPeer).containsFacet(NotPersistedFacet.class);
- will(returnValue(false));
-
- one(mockOwnerAdapter).representsPersistent();
- will(returnValue(true));
-
- one(mockAssociatedAdapter).isTransient();
- will(returnValue(false));
-
- one(mockPeer).getFacet(CollectionAddToFacet.class);
- will(returnValue(mockCollectionAddToFacet));
-
- one(mockCollectionAddToFacet).add(mockOwnerAdapter, mockAssociatedAdapter, InteractionInitiatedBy.USER);
- }
- });
- association.addElement(mockOwnerAdapter, mockAssociatedAdapter, InteractionInitiatedBy.USER);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void cannotRemoveNull() {
- association.removeElement(mockOwnerAdapter, null, InteractionInitiatedBy.USER);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void cannotAddNull() {
- association.addElement(mockOwnerAdapter, null, InteractionInitiatedBy.USER);
- }
-
- private void allowingPeerToReturnCollectionType() {
- context.checking(new Expectations() {
- {
- allowing(mockPeer).getType();
- will(returnValue(COLLECTION_TYPE));
- }
- });
- }
-
- private void allowingPeerToReturnIdentifier() {
- context.checking(new Expectations() {
- {
- one(mockPeer).getIdentifier();
- will(returnValue(Identifier.propertyOrCollectionIdentifier(Customer.class, COLLECTION_ID)));
- }
- });
- }
-
- private void expectPeerToReturnNamedFacet() {
- context.checking(new Expectations() {
- {
- one(mockPeer).getFacet(NamedFacet.class);
- will(returnValue(mockNamedFacet));
-
- one(mockNamedFacet).value();
- will(returnValue("My name"));
- }
- });
- }
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
----------------------------------------------------------------------
diff --git a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
index 3bfd512..e5d488f 100644
--- a/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
+++ b/core/wrapper/src/test/java/org/apache/isis/progmodel/wrapper/WrapperFactoryDefaultTest_wrappedObject.java
@@ -54,7 +54,7 @@ import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
import org.apache.isis.core.metamodel.spec.SpecificationLoader;
import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
-import org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl;
+import org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationDefault;
import org.apache.isis.core.metamodel.specloader.specimpl.dflt.ObjectSpecificationDefault;
import org.apache.isis.core.runtime.authentication.standard.SimpleSession;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
@@ -157,7 +157,7 @@ public class WrapperFactoryDefaultTest_wrappedObject {
final Method employeeDisableNameMethod = methodOf(Employee.class, "disableName");
final Method employeeValidateNameMethod = methodOf(Employee.class, "validateName", String.class);
final Method employeeClearNameMethod = methodOf(Employee.class, "clearName");
- employeeNameMember = new OneToOneAssociationImpl(
+ employeeNameMember = new OneToOneAssociationDefault(
facetedMethodForProperty(
employeeSetNameMethod, employeeGetNameMethod, employeeModifyNameMethod, employeeClearNameMethod, employeeHideNameMethod, employeeDisableNameMethod, employeeValidateNameMethod),
objectMemberDependencies);
[12/12] isis git commit: ISIS-1213: mix-ins for associations.
Posted by da...@apache.org.
ISIS-1213: mix-ins for associations.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/3a299c20
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/3a299c20
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/3a299c20
Branch: refs/heads/ISIS-1213
Commit: 3a299c2000812dc039709895d37bbe6b2e23028d
Parents: 6c88813
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Wed Oct 14 01:28:04 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Wed Oct 14 01:28:04 2015 +0100
----------------------------------------------------------------------
.../layout/ActionLayoutFacetFactory.java | 17 +-
...otContributedFacetDerivedFromMixinFacet.java | 32 +++
...ibutedFacetDerivedFromMixinFacetFactory.java | 52 +++++
.../MixinFacetForDomainObjectAnnotation.java | 9 +
.../mixin/MixinFacetForMixinAnnotation.java | 5 +
.../specloader/ObjectReflectorDefault.java | 8 +
.../specloader/specimpl/ContributeeMember.java | 13 +-
.../specimpl/ObjectActionContributee.java | 3 -
.../specimpl/ObjectActionMixedIn.java | 115 +++--------
.../specimpl/ObjectMemberAbstract.java | 55 +++++-
.../specimpl/ObjectSpecificationAbstract.java | 152 +++++++++++++--
.../specimpl/OneToManyAssociationMixedIn.java | 193 +++++++++++++++++++
.../specimpl/OneToOneAssociationMixedIn.java | 174 +++++++++++++++++
.../dflt/ProgrammingModelFacetsJava5.java | 4 +
.../specimpl/ObjectActionMixedInTest.java | 12 +-
15 files changed, 711 insertions(+), 133 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
index 7e3becf..6219faa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/layout/ActionLayoutFacetFactory.java
@@ -18,9 +18,9 @@
*/
package org.apache.isis.core.metamodel.facets.actions.layout;
-
import java.lang.reflect.Method;
import java.util.Properties;
+
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
@@ -39,6 +39,7 @@ import org.apache.isis.core.metamodel.facets.members.cssclass.CssClassFacet;
import org.apache.isis.core.metamodel.facets.members.cssclassfa.CssClassFaFacet;
import org.apache.isis.core.metamodel.facets.object.bookmarkpolicy.BookmarkPolicyFacet;
import org.apache.isis.core.metamodel.facets.object.domainservice.DomainServiceFacet;
+import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
@@ -122,7 +123,7 @@ public class ActionLayoutFacetFactory extends FacetFactoryAbstract implements Co
// contributing
- if (isContributingService(processMethodContext)) {
+ if (isContributingServiceOrMixinObject(processMethodContext)) {
NotContributedFacet notContributedFacet = NotContributedFacetForLayoutProperties.create(properties, holder);
if(notContributedFacet == null) {
notContributedFacet = NotContributedFacetForActionLayoutAnnotation.create(actionLayout, holder);
@@ -131,18 +132,28 @@ public class ActionLayoutFacetFactory extends FacetFactoryAbstract implements Co
}
}
- protected boolean isContributingService(final ProcessMethodContext processMethodContext) {
+ protected boolean isContributingServiceOrMixinObject(final ProcessMethodContext processMethodContext) {
final Method method = processMethodContext.getMethod();
final Class<?> declaringClass = method.getDeclaringClass();
final ObjectSpecification spec = getSpecificationLoader().loadSpecification(declaringClass);
+ return isContributingService(spec) || isMixinObject(spec);
+ }
+
+ private static boolean isContributingService(final ObjectSpecification spec) {
final DomainServiceFacet domainServiceFacet = spec.getFacet(DomainServiceFacet.class);
return domainServiceFacet != null && !domainServiceFacet.isNoop() &&
domainServiceFacet.getNatureOfService() != NatureOfService.VIEW_MENU_ONLY &&
domainServiceFacet.getNatureOfService() != NatureOfService.DOMAIN;
}
+ private static boolean isMixinObject(final ObjectSpecification spec) {
+ final MixinFacet mixinFacet = spec.getFacet(MixinFacet.class);
+ final boolean b = mixinFacet != null && !mixinFacet.isNoop();
+ return b;
+ }
+ // UNUSED
protected boolean skipContributing(final DomainServiceFacet domainServiceFacet) {
return domainServiceFacet == null || domainServiceFacet.isNoop() || domainServiceFacet.getNatureOfService() == NatureOfService.VIEW_MENU_ONLY || domainServiceFacet.getNatureOfService() == NatureOfService.DOMAIN;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromMixinFacet.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromMixinFacet.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromMixinFacet.java
new file mode 100644
index 0000000..ba6f38f
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromMixinFacet.java
@@ -0,0 +1,32 @@
+/*
+ * 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.actions.notcontributed.derived;
+
+import org.apache.isis.applib.annotation.NotContributed;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacetAbstract;
+
+public class NotContributedFacetDerivedFromMixinFacet extends NotContributedFacetAbstract {
+
+ public NotContributedFacetDerivedFromMixinFacet(
+ final FacetHolder holder) {
+ super(NotContributed.As.EITHER, holder, Derivation.DERIVED);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromMixinFacetFactory.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromMixinFacetFactory.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromMixinFacetFactory.java
new file mode 100644
index 0000000..1e7a052
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/notcontributed/derived/NotContributedFacetDerivedFromMixinFacetFactory.java
@@ -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.core.metamodel.facets.actions.notcontributed.derived;
+
+import java.lang.reflect.Method;
+
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetFactoryAbstract;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+
+public class NotContributedFacetDerivedFromMixinFacetFactory extends FacetFactoryAbstract {
+
+ public NotContributedFacetDerivedFromMixinFacetFactory() {
+ super(FeatureType.ACTIONS_ONLY);
+ }
+
+ @Override
+ public void process(final ProcessMethodContext processMethodContext) {
+ final Method method = processMethodContext.getMethod();
+ final Class<?> declaringClass = method.getDeclaringClass();
+ final ObjectSpecification spec = getSpecificationLoader().loadSpecification(declaringClass);
+
+ final MixinFacet mixinFacet = spec.getFacet(MixinFacet.class);
+ if(mixinFacet == null || mixinFacet.isNoop()) {
+ return;
+ }
+
+ final FacetedMethod facetHolder = processMethodContext.getFacetHolder();
+ FacetUtil.addFacet(new NotContributedFacetDerivedFromMixinFacet(facetHolder));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
index 3493fcc..cdd0c2a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForDomainObjectAnnotation.java
@@ -21,6 +21,8 @@ package org.apache.isis.core.metamodel.facets.object.mixin;
import java.lang.reflect.Constructor;
+import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.annotation.Nature;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
@@ -42,6 +44,13 @@ public class MixinFacetForDomainObjectAnnotation extends MixinFacetAbstract {
public static MixinFacet create(
final Class<?> candidateMixinType, final FacetHolder facetHolder,
final ServicesInjector servicesInjector) {
+ final DomainObject domainObject = candidateMixinType.getAnnotation(DomainObject.class);
+ if(domainObject == null) {
+ return null;
+ }
+ if(domainObject.nature() != Nature.MIXIN) {
+ return null;
+ }
final Constructor<?>[] constructors = candidateMixinType.getConstructors();
for (Constructor<?> constructor : constructors) {
final Class<?>[] constructorTypes = constructor.getParameterTypes();
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java
index ed369c5..7aedf55 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/mixin/MixinFacetForMixinAnnotation.java
@@ -21,6 +21,7 @@ package org.apache.isis.core.metamodel.facets.object.mixin;
import java.lang.reflect.Constructor;
+import org.apache.isis.applib.annotation.Mixin;
import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
@@ -42,6 +43,10 @@ public class MixinFacetForMixinAnnotation extends MixinFacetAbstract {
public static MixinFacet create(
final Class<?> candidateMixinType, final FacetHolder facetHolder,
final ServicesInjector servicesInjector) {
+ final Mixin mixin = candidateMixinType.getAnnotation(Mixin.class);
+ if(mixin == null) {
+ return null;
+ }
final Constructor<?>[] constructors = candidateMixinType.getConstructors();
for (Constructor<?> constructor : constructors) {
final Class<?>[] constructorTypes = constructor.getParameterTypes();
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
index cdea01b..4bb6a47 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
@@ -32,6 +32,7 @@ import com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.isis.applib.AppManifest;
import org.apache.isis.core.commons.components.ApplicationScopedComponent;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.commons.debug.DebugBuilder;
@@ -250,6 +251,7 @@ public final class ObjectReflectorDefault
metaModelValidator.init();
loadSpecificationsForServices();
+ loadSpecificationsForMixins();
}
private void loadSpecificationsForServices() {
@@ -258,6 +260,12 @@ public final class ObjectReflectorDefault
}
}
+ private void loadSpecificationsForMixins() {
+ for (final Class<?> mixinType : AppManifest.Registry.instance().getMixinTypes()) {
+ internalLoadSpecification(mixinType);
+ }
+ }
+
private void cacheBySpecId() {
final Map<ObjectSpecId, ObjectSpecification> specById = Maps.newHashMap();
for (final ObjectSpecification objSpec : allSpecifications()) {
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ContributeeMember.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ContributeeMember.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ContributeeMember.java
index 97dd48d..9aca015 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ContributeeMember.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ContributeeMember.java
@@ -26,15 +26,14 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
* Interface indicating an a contributed association or action.
*/
public interface ContributeeMember extends ObjectMember {
-
+
+
public static class Predicates {
private Predicates(){}
-
+
/**
- * Evaluates the supplied {@link ObjectMember} and includes either if it is not a {@link ContributeeMember}
- * (ie is a regular member) or is a {@link ContributeeMember} and contributed are to be
- * {@link Contributed#isIncluded() included}.
+ * Now generalized to handle {@link MixedInMember}s as well as {@link ContributeeMember}s.
*/
public static <T extends ObjectMember> Predicate<T> regularElse(final Contributed contributed) {
return com.google.common.base.Predicates.or(regular(), is(contributed));
@@ -44,7 +43,7 @@ public interface ContributeeMember extends ObjectMember {
return new Predicate<T>() {
@Override
public boolean apply(ObjectMember input) {
- return !(input instanceof ContributeeMember);
+ return !(input instanceof ContributeeMember) && !(input instanceof MixedInMember);
}
};
}
@@ -53,7 +52,7 @@ public interface ContributeeMember extends ObjectMember {
return new Predicate<T>() {
@Override
public boolean apply(ObjectMember input) {
- return input instanceof ContributeeMember && contributed.isIncluded();
+ return contributed.isIncluded();
}
};
}
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
index 117d2e4..5aa6444 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
@@ -72,9 +72,6 @@ public class ObjectActionContributee extends ObjectActionDefault implements Cont
private final Identifier identifier;
- /**
- * @param contributeeParam - the parameter number which corresponds to the contributee, and so should be suppressed.
- */
public ObjectActionContributee(
final Object servicePojo,
final ObjectActionDefault serviceAction,
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 3f68d8e..067be24 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -25,27 +25,25 @@ import com.google.common.collect.Lists;
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.Bulk;
import org.apache.isis.applib.annotation.InvokedOn;
+import org.apache.isis.applib.annotation.NotContributed;
import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.filter.Filter;
import org.apache.isis.applib.services.actinvoc.ActionInvocationContext;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.command.Command;
import org.apache.isis.applib.services.command.Command.Executor;
import org.apache.isis.applib.services.command.CommandContext;
import org.apache.isis.core.commons.lang.ObjectExtensions;
-import org.apache.isis.core.commons.lang.StringExtensions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
import org.apache.isis.core.metamodel.facets.actions.action.invocation.CommandUtil;
import org.apache.isis.core.metamodel.facets.actions.bulk.BulkFacet;
+import org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet;
+import org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacetAbstract;
import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
-import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.interactions.UsabilityContext;
import org.apache.isis.core.metamodel.interactions.VisibilityContext;
@@ -99,39 +97,20 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
// adjust name if necessary
final String name = getName();
- String memberName = null;
if(Objects.equal(name, "_")) {
- memberName = determineNameFrom(mixinAction);
+ String memberName = determineNameFrom(mixinAction);
FacetUtil.addFacet(new NamedFacetInferred(memberName, facetHolder));
}
// calculate the identifier
final Identifier mixinIdentifier = mixinAction.getFacetedMethod().getIdentifier();
- memberName = memberName != null? memberName : mixinIdentifier.getMemberName();
List<String> memberParameterNames = mixinIdentifier.getMemberParameterNames();
- identifier = Identifier.actionIdentifier(getOnType().getCorrespondingClass().getName(), memberName, memberParameterNames);
+ identifier = Identifier.actionIdentifier(getOnType().getCorrespondingClass().getName(), getId(), memberParameterNames);
}
- private static String determineNameFrom(final ObjectActionDefault mixinAction) {
- return suffixAfterUnderscore(mixinAction.getOnType().getSingularName());
- }
-
- static String suffixAfterUnderscore(final String singularName) {
- return StringExtensions.asCapitalizedName(suffix(singularName));
- }
-
- private static String suffix(final String singularName) {
- if (singularName.endsWith("_")) {
- if (Objects.equal(singularName, "_")) {
- return singularName;
- }
- return singularName;
- }
- final int indexOfUnderscore = singularName.lastIndexOf('_');
- if (indexOfUnderscore == -1) {
- return singularName;
- }
- return singularName.substring(indexOfUnderscore + 1);
+ @Override
+ public String getId() {
+ return determineIdFrom(this.mixinAction);
}
@Override
@@ -166,9 +145,10 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
public Consent isVisible(
final ObjectAdapter mixedInAdapter,
final InteractionInitiatedBy interactionInitiatedBy,
- Where where) {
- final VisibilityContext<?> ic = mixinAction.createVisibleInteractionContext(mixinAdapterFor(mixedInAdapter),
- interactionInitiatedBy, where);
+ final Where where) {
+ final VisibilityContext<?> ic =
+ mixinAction.createVisibleInteractionContext(
+ mixinAdapterFor(mixinType, mixedInAdapter), interactionInitiatedBy, where);
return InteractionUtils.isVisibleResult(this, ic).createConsent();
}
@@ -176,28 +156,29 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
public Consent isUsable(
final ObjectAdapter mixedInAdapter,
final InteractionInitiatedBy interactionInitiatedBy, final Where where) {
- final UsabilityContext<?> ic = mixinAction.createUsableInteractionContext(mixinAdapterFor(mixedInAdapter),
- interactionInitiatedBy, where);
+ final UsabilityContext<?> ic =
+ mixinAction.createUsableInteractionContext(
+ mixinAdapterFor(mixinType, mixedInAdapter), interactionInitiatedBy, where);
return InteractionUtils.isUsableResult(this, ic).createConsent();
}
@Override
public ObjectAdapter[] getDefaults(final ObjectAdapter mixedInAdapter) {
- return mixinAction.getDefaults(mixinAdapterFor(mixedInAdapter));
+ return mixinAction.getDefaults(mixinAdapterFor(mixinType, mixedInAdapter));
}
@Override
public ObjectAdapter[][] getChoices(
final ObjectAdapter mixedInAdapter,
final InteractionInitiatedBy interactionInitiatedBy) {
- return mixinAction.getChoices(mixinAdapterFor(mixedInAdapter), interactionInitiatedBy);
+ return mixinAction.getChoices(mixinAdapterFor(mixinType, mixedInAdapter), interactionInitiatedBy);
}
public Consent isProposedArgumentSetValid(
final ObjectAdapter mixedInAdapter,
final ObjectAdapter[] proposedArguments,
final InteractionInitiatedBy interactionInitiatedBy) {
- return mixinAction.isProposedArgumentSetValid(mixinAdapterFor(mixedInAdapter), proposedArguments, interactionInitiatedBy);
+ return mixinAction.isProposedArgumentSetValid(mixinAdapterFor(mixinType, mixedInAdapter), proposedArguments, interactionInitiatedBy);
}
@Override
@@ -248,61 +229,22 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
}
}
- return mixinAction.execute(mixinAdapterFor(mixedInAdapter), arguments, interactionInitiatedBy);
- }
-
- // //////////////////////////////////////
- // FacetHolder
- // //////////////////////////////////////
-
- @Override
- public Class<? extends Facet>[] getFacetTypes() {
- return facetHolder.getFacetTypes();
- }
-
- @Override
- public <T extends Facet> T getFacet(Class<T> cls) {
- return facetHolder.getFacet(cls);
- }
-
- @Override
- public boolean containsFacet(Class<? extends Facet> facetType) {
- return facetHolder.containsFacet(facetType);
+ return mixinAction.execute(mixinAdapterFor(mixinType, mixedInAdapter), arguments, interactionInitiatedBy);
}
- @Override
- public boolean containsDoOpFacet(Class<? extends Facet> facetType) {
- return facetHolder.containsDoOpFacet(facetType);
- }
+ //region > facetHolder
@Override
- public List<Facet> getFacets(Filter<Facet> filter) {
- return facetHolder.getFacets(filter);
+ protected FacetHolder getFacetHolder() {
+ return facetHolder;
}
+ //endregion
- @Override
- public void addFacet(Facet facet) {
- facetHolder.addFacet(facet);
- }
- @Override
- public void addFacet(MultiTypedFacet facet) {
- facetHolder.addFacet(facet);
- }
-
- @Override
- public void removeFacet(Facet facet) {
- facetHolder.removeFacet(facet);
- }
-
- @Override
- public void removeFacet(Class<? extends Facet> facetType) {
- facetHolder.removeFacet(facetType);
+ ObjectAdapter mixinAdapterFor(final ObjectAdapter mixedInAdapter) {
+ return mixinAdapterFor(mixinType, mixedInAdapter);
}
-
- // //////////////////////////////////////
-
/* (non-Javadoc)
* @see org.apache.isis.core.metamodel.specloader.specimpl.ObjectMemberAbstract#getIdentifier()
*/
@@ -311,12 +253,5 @@ public class ObjectActionMixedIn extends ObjectActionDefault implements MixedInM
return identifier;
}
- // //////////////////////////////////////
- ObjectAdapter mixinAdapterFor(final ObjectAdapter mixedInAdapter) {
- final ObjectSpecification objectSpecification = getSpecificationLoader().loadSpecification(mixinType);
- final MixinFacet mixinFacet = objectSpecification.getFacet(MixinFacet.class);
- final Object mixinPojo = mixinFacet.instantiate(mixedInAdapter.getObject());
- return getPersistenceSessionService().adapterFor(mixinPojo);
- }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index 85ba2f3..2fc4fc3 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -21,6 +21,8 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
import java.util.List;
+import com.google.common.base.Objects;
+
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.When;
import org.apache.isis.applib.annotation.Where;
@@ -39,6 +41,7 @@ import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
import org.apache.isis.core.metamodel.facets.all.help.HelpFacet;
import org.apache.isis.core.metamodel.facets.all.hide.HiddenFacet;
import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.facets.object.mixin.MixinFacet;
import org.apache.isis.core.metamodel.interactions.AccessContext;
import org.apache.isis.core.metamodel.interactions.DisablingInteractionAdvisor;
import org.apache.isis.core.metamodel.interactions.HidingInteractionAdvisor;
@@ -63,7 +66,6 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
//region > fields
private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
- protected final String defaultName;
private final String id;
private final FacetedMethod facetedMethod;
private final FeatureType featureType;
@@ -78,12 +80,11 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
final ObjectMemberDependencies objectMemberDependencies) {
final String id = facetedMethod.getIdentifier().getMemberName();
if (id == null) {
- throw new IllegalArgumentException("Name must always be set");
+ throw new IllegalArgumentException("Id must always be set");
}
this.facetedMethod = facetedMethod;
this.featureType = featureType;
this.id = id;
- this.defaultName = StringExtensions.asNaturalName2(this.id);
this.specificationLookup = objectMemberDependencies.getSpecificationLoader();
this.servicesInjector = objectMemberDependencies.getServicesInjector();
@@ -182,7 +183,7 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
}
else {
// this should now be redundant, see NamedFacetDefault
- return defaultName;
+ return StringExtensions.asNaturalName2(getId());
}
}
@@ -310,6 +311,52 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
}
//endregion
+ //region > mixinAdapterFor
+ /**
+ * For mixins
+ */
+ protected ObjectAdapter mixinAdapterFor(
+ final Class<?> mixinType,
+ final ObjectAdapter mixedInAdapter) {
+ final ObjectSpecification objectSpecification = getSpecificationLoader().loadSpecification(mixinType);
+ final MixinFacet mixinFacet = objectSpecification.getFacet(MixinFacet.class);
+ final Object mixinPojo = mixinFacet.instantiate(mixedInAdapter.getObject());
+ return getPersistenceSessionService().adapterFor(mixinPojo);
+ }
+
+ static String determineNameFrom(final ObjectActionDefault mixinAction) {
+ return StringExtensions.asCapitalizedName(suffix(mixinAction));
+ }
+
+ static String determineIdFrom(final ObjectActionDefault mixinAction) {
+ final String id = compress(suffix(mixinAction));
+ return id;
+ }
+
+ private static String compress(final String suffix) {
+ return suffix.replaceAll(" ","");
+ }
+
+ static String suffix(final ObjectActionDefault mixinAction) {
+ return suffix(mixinAction.getOnType().getSingularName());
+ }
+
+ static String suffix(final String singularName) {
+ if (singularName.endsWith("_")) {
+ if (Objects.equal(singularName, "_")) {
+ return singularName;
+ }
+ return singularName;
+ }
+ final int indexOfUnderscore = singularName.lastIndexOf('_');
+ if (indexOfUnderscore == -1) {
+ return singularName;
+ }
+ return singularName.substring(indexOfUnderscore + 1);
+ }
+
+ //endregion
+
//region > toString
@Override
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index f7968a3..fd6bf5c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -27,6 +27,7 @@ import java.util.Properties;
import java.util.Set;
import com.google.common.base.Function;
+import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
@@ -148,8 +149,8 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return map;
}
- private boolean contributeeAssociationsAdded;
- private boolean contributeeActionsAdded;
+ private boolean contributeeAndMixedInAssociationsAdded;
+ private boolean contributeeAndMixedInActionsAdded;
private final List<ObjectSpecification> interfaces = Lists.newArrayList();
@@ -623,12 +624,13 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
public List<ObjectAssociation> getAssociations(final Contributed contributed) {
// the "contributed.isIncluded()" guard is required because we cannot do this too early;
// there must be a session available
- if(contributed.isIncluded() && !contributeeAssociationsAdded) {
+ if(contributed.isIncluded() && !contributeeAndMixedInAssociationsAdded) {
synchronized (this.associations) {
List<ObjectAssociation> associations = Lists.newArrayList(this.associations);
associations.addAll(createContributeeAssociations());
+ associations.addAll(createMixedInAssociations());
sortAndUpdateAssociations(associations);
- contributeeAssociationsAdded = true;
+ contributeeAndMixedInAssociationsAdded = true;
}
}
final List<ObjectAssociation> associations = Lists.newArrayList(this.associations);
@@ -736,13 +738,13 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
// and they have not yet been added
// the "contributed.isIncluded()" guard is required because we cannot do this too early;
// there must be a session available
- if(contributed.isIncluded() && !contributeeActionsAdded) {
+ if(contributed.isIncluded() && !contributeeAndMixedInActionsAdded) {
synchronized (this.objectActions) {
final List<ObjectAction> actions = Lists.newArrayList(this.objectActions);
actions.addAll(createContributeeActions());
- actions.addAll(createMixinActions());
+ actions.addAll(createMixedInActions());
sortCacheAndUpdateActions(actions);
- contributeeActionsAdded = true;
+ contributeeAndMixedInActionsAdded = true;
}
}
@@ -894,8 +896,11 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
contributedActions.add((ObjectActionDefault) serviceAction);
}
- return Lists.newArrayList(Iterables.transform(contributedActions, createContributeeAssociationFunctor(
- servicePojo, this)));
+ return Lists.newArrayList(
+ Iterables.transform(
+ contributedActions,
+ createContributeeAssociationFunctor(servicePojo, this)
+ ));
}
private Function<ObjectActionDefault, ObjectAssociation> createContributeeAssociationFunctor(
@@ -905,14 +910,114 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
@Override
public ObjectAssociation apply(ObjectActionDefault input) {
final ObjectSpecification returnType = input.getReturnType();
- final ObjectAssociationAbstract association = returnType.isNotCollection()
- ? new OneToOneAssociationContributee(servicePojo, input, contributeeType,
- objectMemberDependencies)
- : new OneToManyAssociationContributee(servicePojo, input, contributeeType,
- objectMemberDependencies);
+ final ObjectAssociationAbstract association = createObjectAssociation(input, returnType);
facetProcessor.processMemberOrder(metadataProperties, association);
return association;
}
+
+ ObjectAssociationAbstract createObjectAssociation(
+ final ObjectActionDefault input,
+ final ObjectSpecification returnType) {
+ if (returnType.isNotCollection()) {
+ return new OneToOneAssociationContributee(servicePojo, input, contributeeType,
+ objectMemberDependencies);
+ } else {
+ return new OneToManyAssociationContributee(servicePojo, input, contributeeType,
+ objectMemberDependencies);
+ }
+ }
+ };
+ }
+
+ //endregion
+
+ //region > mixin associations (properties and collections)
+
+ private List<ObjectAssociation> createMixedInAssociations() {
+ if (isService() || isValue()) {
+ return Collections.emptyList();
+ }
+
+ final Set<Class<?>> mixinTypes = AppManifest.Registry.instance().getMixinTypes();
+ if(mixinTypes == null) {
+ return Collections.emptyList();
+ }
+
+ final List<ObjectAssociation> mixedInAssociations = Lists.newArrayList();
+
+ for (final Class<?> mixinType : mixinTypes) {
+ addMixedInAssociationsIfAny(mixinType, mixedInAssociations);
+ }
+ return mixedInAssociations;
+ }
+
+ private void addMixedInAssociationsIfAny(
+ final Class<?> mixinType, final List<ObjectAssociation> toAppendTo) {
+
+ final ObjectSpecification specification = getSpecificationLoader().loadSpecification(mixinType);
+ if (specification == this) {
+ return;
+ }
+ final MixinFacet mixinFacet = specification.getFacet(MixinFacet.class);
+ if(mixinFacet == null) {
+ // this shouldn't happen; perhaps it would be more correct to throw an exception?
+ return;
+ }
+ if(!mixinFacet.isMixinFor(getCorrespondingClass())) {
+ return;
+ }
+
+ final List<ObjectActionDefault> mixinActions = getObjectActions(specification);
+
+ final List<ObjectAssociation> mixedInAssociations = Lists.newArrayList(
+ Iterables.transform(
+ Iterables.filter(mixinActions, new Predicate<ObjectActionDefault>() {
+ @Override public boolean apply(final ObjectActionDefault input) {
+ final NotContributedFacet notContributedFacet = input.getFacet(NotContributedFacet.class);
+ if (notContributedFacet == null || !notContributedFacet.toActions()) {
+ return false;
+ }
+ if(input.getParameterCount() != 0) {
+ return false;
+ }
+ if(!input.getSemantics().isSafeInNature()) {
+ return false;
+ }
+ return true;
+ }
+ }),
+ createMixedInAssociationFunctor(this, mixinType)
+ ));
+
+ toAppendTo.addAll(mixedInAssociations);
+ }
+
+ private List getObjectActions(final ObjectSpecification specification) {
+ return specification.getObjectActions(ActionType.ALL, Contributed.INCLUDED, Filters.<ObjectAction>any());
+ }
+
+ private Function<ObjectActionDefault, ObjectAssociation> createMixedInAssociationFunctor(
+ final ObjectSpecification mixedInType,
+ final Class<?> mixinType) {
+ return new Function<ObjectActionDefault, ObjectAssociation>(){
+ @Override
+ public ObjectAssociation apply(final ObjectActionDefault mixinAction) {
+ final ObjectAssociationAbstract association = createObjectAssociation(mixinAction);
+ facetProcessor.processMemberOrder(metadataProperties, association);
+ return association;
+ }
+
+ ObjectAssociationAbstract createObjectAssociation(
+ final ObjectActionDefault mixinAction) {
+ final ObjectSpecification returnType = mixinAction.getReturnType();
+ if (returnType.isNotCollection()) {
+ return new OneToOneAssociationMixedIn(
+ mixinAction, mixedInType, mixinType, objectMemberDependencies);
+ } else {
+ return new OneToManyAssociationMixedIn(
+ mixinAction, mixedInType, mixinType, objectMemberDependencies);
+ }
+ }
};
}
@@ -1004,7 +1109,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
* If this specification {@link #isService() is actually for} a service,
* then returns an empty list.
*/
- protected List<ObjectAction> createMixinActions() {
+ protected List<ObjectAction> createMixedInActions() {
if (isService() || isValue()) {
return Collections.emptyList();
}
@@ -1013,17 +1118,17 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
return Collections.emptyList();
}
- final List<ObjectAction> mixinActions = Lists.newArrayList();
+ final List<ObjectAction> mixedInActions = Lists.newArrayList();
for (final Class<?> mixinType : mixinTypes) {
- addMixinActionsIfAny(mixinType, mixinActions);
+ addMixedInActionsIfAny(mixinType, mixedInActions);
}
- return mixinActions;
+ return mixedInActions;
}
- private void addMixinActionsIfAny(
+ private void addMixedInActionsIfAny(
final Class<?> mixinType,
- final List<ObjectAction> mixinActionsToAppendTo) {
+ final List<ObjectAction> mixedInActionsToAppendTo) {
final ObjectSpecification specification = getSpecificationLoader().loadSpecification(mixinType);
if (specification == this) {
return;
@@ -1048,16 +1153,21 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
continue;
}
final ObjectActionDefault mixinAction = (ObjectActionDefault) mixinTypeAction;
+ final NotContributedFacet notContributedFacet = mixinAction.getFacet(NotContributedFacet.class);
+ if(notContributedFacet.toActions()) {
+ continue;
+ }
ObjectActionMixedIn mixedInAction =
new ObjectActionMixedIn(mixinType, mixinAction, this, objectMemberDependencies);
facetProcessor.processMemberOrder(metadataProperties, mixedInAction);
actions.add(mixedInAction);
}
- mixinActionsToAppendTo.addAll(actions);
+ mixedInActionsToAppendTo.addAll(actions);
}
//endregion
+
//region > validity
@Override
public Consent isValid(final ObjectAdapter targetAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
new file mode 100644
index 0000000..1890b3d
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationMixedIn.java
@@ -0,0 +1,193 @@
+/**
+ * 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.specloader.specimpl;
+
+import java.util.List;
+
+import com.google.common.base.Objects;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
+import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetAbstract;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetForContributee;
+import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.InteractionUtils;
+import org.apache.isis.core.metamodel.interactions.UsabilityContext;
+import org.apache.isis.core.metamodel.interactions.VisibilityContext;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
+
+public class OneToManyAssociationMixedIn extends OneToManyAssociationDefault implements MixedInMember {
+
+ /**
+ * The type of the mixin (providing the action), eg annotated with {@link org.apache.isis.applib.annotation.Mixin}.
+ */
+ private final Class<?> mixinType;
+
+ /**
+ * The {@link ObjectActionDefault} for the action being mixed in (ie on the {@link #mixinType}.
+ */
+ private final ObjectActionDefault mixinAction;
+
+ /**
+ * The domain object type being mixed in to (being supplemented).
+ */
+ private final ObjectSpecification mixedInType;
+
+
+ /**
+ * Hold facets rather than delegate to the mixin action (different types might use layout metadata to position
+ * the mixin in different ways)
+ */
+ private final FacetHolder facetHolder = new FacetHolderImpl();
+
+ private final Identifier identifier;
+
+ private static ObjectSpecification typeOfSpec(
+ final ObjectActionDefault objectAction,
+ final ObjectMemberDependencies objectMemberDependencies) {
+
+ final TypeOfFacet actionTypeOfFacet = objectAction.getFacet(TypeOfFacet.class);
+ final SpecificationLoader specificationLookup = objectMemberDependencies.getSpecificationLoader();
+ // TODO: a bit of a hack; ought really to set up a fallback TypeOfFacetDefault which ensures that there is always
+ // a TypeOfFacet for any mixedIn associations created from mixin actions.
+ Class<? extends Object> cls = actionTypeOfFacet != null? actionTypeOfFacet.value(): Object.class;
+ return specificationLookup.loadSpecification(cls);
+ }
+
+ public OneToManyAssociationMixedIn(
+ final ObjectActionDefault mixinAction,
+ final ObjectSpecification mixedInType,
+ final Class<?> mixinType,
+ final ObjectMemberDependencies objectMemberDependencies) {
+ super(mixinAction.getFacetedMethod(),
+ typeOfSpec(mixinAction, objectMemberDependencies),
+ objectMemberDependencies);
+
+ this.mixinType = mixinType;
+ this.mixinAction = mixinAction;
+ this.mixedInType = mixedInType;
+
+ //
+ // ensure the mixedIn collection cannot be modified, and derive its TypeOfFaccet
+ //
+ final NotPersistedFacet notPersistedFacet = new NotPersistedFacetAbstract(this) {};
+ final DisabledFacet disabledFacet = disabledFacet();
+ final TypeOfFacet typeOfFacet = new TypeOfFacetAbstract(getSpecification().getCorrespondingClass(), this, objectMemberDependencies
+ .getSpecificationLoader()) {};
+
+ FacetUtil.addFacet(notPersistedFacet);
+ FacetUtil.addFacet(disabledFacet);
+ FacetUtil.addFacet(typeOfFacet);
+
+
+ //
+ // in addition, copy over facets from contributed to own.
+ //
+ // These could include everything under @Collection(...) because the
+ // CollectionAnnotationFacetFactory is also run against actions.
+ //
+ FacetUtil.copyFacets(mixinAction.getFacetedMethod(), facetHolder);
+
+ // adjust name if necessary
+ final String name = getName();
+
+ if(Objects.equal(name, "_")) {
+ String memberName = ObjectActionMixedIn.determineNameFrom(mixinAction);
+ FacetUtil.addFacet(new NamedFacetInferred(memberName, facetHolder));
+ }
+
+ // calculate the identifier
+ final Identifier mixinIdentifier = mixinAction.getFacetedMethod().getIdentifier();
+ List<String> memberParameterNames = mixinIdentifier.getMemberParameterNames();
+
+ identifier = Identifier.actionIdentifier(mixedInType.getCorrespondingClass().getName(), getId(), memberParameterNames);
+ }
+
+ private DisabledFacet disabledFacet() {
+ final DisabledFacet originalFacet = facetHolder.getFacet(DisabledFacet.class);
+ if( originalFacet != null &&
+ originalFacet.when() == When.ALWAYS &&
+ originalFacet.where() == Where.ANYWHERE) {
+ return originalFacet;
+ }
+ // ensure that the contributed association is always disabled
+ return new DisabledFacetForContributee("Contributed collection", this);
+ }
+
+ @Override
+ public ObjectAdapter get(final ObjectAdapter mixedInAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
+ final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
+ return mixinAction.execute(mixinAdapter, new ObjectAdapter[0], interactionInitiatedBy);
+ }
+
+ @Override
+ public Identifier getIdentifier() {
+ return identifier;
+ }
+
+ @Override
+ public String getId() {
+ return determineIdFrom(this.mixinAction);
+ }
+
+ @Override
+ public Consent isVisible(
+ final ObjectAdapter mixedInAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy,
+ final Where where) {
+ final VisibilityContext<?> ic =
+ mixinAction.createVisibleInteractionContext(
+ mixinAdapterFor(mixinType, mixedInAdapter), interactionInitiatedBy, where);
+ return InteractionUtils.isVisibleResult(this, ic).createConsent();
+ }
+
+ @Override
+ public Consent isUsable(
+ final ObjectAdapter mixedInAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy,
+ final Where where) {
+ final UsabilityContext<?> ic =
+ mixinAction.createUsableInteractionContext(
+ mixinAdapterFor(mixinType, mixedInAdapter), interactionInitiatedBy, where);
+ return InteractionUtils.isUsableResult(this, ic).createConsent();
+ }
+
+ //region > FacetHolder
+
+ @Override
+ protected FacetHolder getFacetHolder() {
+ return facetHolder;
+ }
+
+ //endregion
+
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
new file mode 100644
index 0000000..71daf26
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationMixedIn.java
@@ -0,0 +1,174 @@
+/**
+ * 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.specloader.specimpl;
+
+import java.util.List;
+
+import com.google.common.base.Objects;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.applib.annotation.NotContributed;
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.facetapi.FacetHolder;
+import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
+import org.apache.isis.core.metamodel.facetapi.FacetUtil;
+import org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacet;
+import org.apache.isis.core.metamodel.facets.actions.notcontributed.NotContributedFacetAbstract;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacetInferred;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
+import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetForContributee;
+import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.notpersisted.NotPersistedFacetAbstract;
+import org.apache.isis.core.metamodel.interactions.InteractionUtils;
+import org.apache.isis.core.metamodel.interactions.UsabilityContext;
+import org.apache.isis.core.metamodel.interactions.VisibilityContext;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
+
+public class OneToOneAssociationMixedIn extends OneToOneAssociationDefault implements MixedInMember {
+
+ /**
+ * The type of the mixin (providing the action), eg annotated with {@link org.apache.isis.applib.annotation.Mixin}.
+ */
+ private final Class<?> mixinType;
+
+ /**
+ * The {@link ObjectActionDefault} for the action being mixed in (ie on the {@link #mixinType}.
+ */
+ private final ObjectActionDefault mixinAction;
+
+ /**
+ * The domain object type being mixed in to (being supplemented).
+ */
+ private final ObjectSpecification mixedInType;
+
+
+ /**
+ * Hold facets rather than delegate to the contributed action (different types might
+ * use layout metadata to position the contributee in different ways)
+ */
+ private final FacetHolder facetHolder = new FacetHolderImpl();
+
+ private final Identifier identifier;
+
+ public OneToOneAssociationMixedIn(
+ final ObjectActionDefault mixinAction,
+ final ObjectSpecification mixedInType,
+ final Class<?> mixinType,
+ final ObjectMemberDependencies objectMemberDependencies) {
+ super(mixinAction.getFacetedMethod(), mixinAction.getReturnType(), objectMemberDependencies);
+
+ this.mixinType = mixinType;
+ this.mixinAction = mixinAction;
+ this.mixedInType = mixedInType;
+
+ //
+ // ensure the contributed property cannot be modified
+ //
+ final NotPersistedFacet notPersistedFacet = new NotPersistedFacetAbstract(this) {};
+ final DisabledFacet disabledFacet = disabledFacet();
+
+ FacetUtil.addFacet(notPersistedFacet);
+ FacetUtil.addFacet(disabledFacet);
+
+ //
+ // in addition, copy over facets from contributed to own.
+ //
+ // These could include everything under @Property(...) because the
+ // PropertyAnnotationFacetFactory is also run against actions.
+ //
+ FacetUtil.copyFacets(mixinAction.getFacetedMethod(), facetHolder);
+
+
+
+ // adjust name if necessary
+ final String name = getName();
+
+ if(Objects.equal(name, "_")) {
+ String memberName = ObjectActionMixedIn.determineNameFrom(mixinAction);
+ FacetUtil.addFacet(new NamedFacetInferred(memberName, facetHolder));
+ }
+
+
+ // calculate the identifier
+ final Identifier mixinIdentifier = mixinAction.getFacetedMethod().getIdentifier();
+ List<String> memberParameterNames = mixinIdentifier.getMemberParameterNames();
+
+ identifier = Identifier.actionIdentifier(mixedInType.getCorrespondingClass().getName(), getId(), memberParameterNames);
+ }
+
+ private DisabledFacet disabledFacet() {
+ final DisabledFacet originalFacet = facetHolder.getFacet(DisabledFacet.class);
+ if( originalFacet != null &&
+ originalFacet.when() == When.ALWAYS &&
+ originalFacet.where() == Where.ANYWHERE) {
+ return originalFacet;
+ }
+ // ensure that the contributed association is always disabled
+ return new DisabledFacetForContributee("Contributed property", this);
+ }
+
+ @Override
+ public ObjectAdapter get(
+ final ObjectAdapter mixedInAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+
+ final ObjectAdapter mixinAdapter = mixinAdapterFor(mixinType, mixedInAdapter);
+ return mixinAction.execute(mixinAdapter, new ObjectAdapter[0], interactionInitiatedBy);
+ }
+
+ @Override
+ public Identifier getIdentifier() {
+ return identifier;
+ }
+
+ @Override
+ public String getId() {
+ return determineIdFrom(this.mixinAction);
+ }
+
+ @Override
+ public Consent isVisible(
+ final ObjectAdapter mixedInAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy,
+ Where where) {
+ final VisibilityContext<?> ic =
+ mixinAction.createVisibleInteractionContext(
+ mixinAdapterFor(mixinType, mixedInAdapter), interactionInitiatedBy, where);
+ return InteractionUtils.isVisibleResult(this, ic).createConsent();
+ }
+
+ @Override
+ public Consent isUsable(
+ final ObjectAdapter mixedInAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy, final Where where) {
+ final UsabilityContext<?> ic =
+ mixinAction.createUsableInteractionContext(
+ mixinAdapterFor(mixinType, mixedInAdapter), interactionInitiatedBy, where);
+ return InteractionUtils.isUsableResult(this, ic).createConsent();
+ }
+
+ @Override
+ protected FacetHolder getFacetHolder() {
+ return facetHolder;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
index f21e958..4b9c4b7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
+++ b/core/metamodel/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
@@ -28,6 +28,7 @@ import org.apache.isis.core.metamodel.facets.actions.interaction.ActionNamedDebu
import org.apache.isis.core.metamodel.facets.actions.layout.ActionLayoutFacetFactory;
import org.apache.isis.core.metamodel.facets.actions.notcontributed.annotation.NotContributedFacetAnnotationFactory;
import org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromDomainServiceFacetFactory;
+import org.apache.isis.core.metamodel.facets.actions.notcontributed.derived.NotContributedFacetDerivedFromMixinFacetFactory;
import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.annotation.NotInServiceMenuFacetAnnotationFactory;
import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.derived.NotInServiceMenuFacetDerivedFromDomainServiceFacetFactory;
import org.apache.isis.core.metamodel.facets.actions.notinservicemenu.method.NotInServiceMenuFacetViaMethodFactory;
@@ -365,6 +366,7 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
addFactory(RecreatableObjectFacetFactory.class);
addFactory(MixinFacetForMixinAnnotationFactory.class);
+
addFactory(MaxLengthFacetOnTypeAnnotationFactory.class);
addFactory(MaxLengthFacetOnActionAnnotationFactory.class);
@@ -389,6 +391,8 @@ public final class ProgrammingModelFacetsJava5 extends ProgrammingModelAbstract
// must come after DomainObjectAnnotationFacetFactory
addFactory(DisabledFacetOnPropertyDerivedFromRecreatableObjectFacetFactory.class);
addFactory(DisabledFacetOnCollectionDerivedFromViewModelFacetFactory.class);
+ // must come after DomainObjectAnnotationFacetFactory & MixinFacetFactory
+ addFactory(NotContributedFacetDerivedFromMixinFacetFactory.class);
addFactory(DomainServiceLayoutFactory.class);
addFactory(DomainObjectLayoutFacetFactory.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/3a299c20/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
index fdb3eaf..9707af6 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
@@ -2,6 +2,8 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
import org.junit.Test;
+import org.apache.isis.core.commons.lang.StringExtensions;
+
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
@@ -12,31 +14,31 @@ public class ObjectActionMixedInTest {
@Test
public void exactly_underscore() throws Exception {
- final String s = ObjectActionMixedIn.suffixAfterUnderscore("_");
+ final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("_"));
assertThat(s, is("_"));
}
@Test
public void ends_with_underscore() throws Exception {
- final String s = ObjectActionMixedIn.suffixAfterUnderscore("abc_");
+ final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("abc_"));
assertThat(s, is("Abc_"));
}
@Test
public void has_no_underscore() throws Exception {
- final String s = ObjectActionMixedIn.suffixAfterUnderscore("defghij");
+ final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("defghij"));
assertThat(s, is("Defghij"));
}
@Test
public void contains_one_underscore() throws Exception {
- final String s = ObjectActionMixedIn.suffixAfterUnderscore("abc_def");
+ final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("abc_def"));
assertThat(s, is("Def"));
}
@Test
public void contains_more_than_one_underscore() throws Exception {
- final String s = ObjectActionMixedIn.suffixAfterUnderscore("abc_def_ghi");
+ final String s = StringExtensions.asCapitalizedName(ObjectMemberAbstract.suffix("abc_def_ghi"));
assertThat(s, is("Ghi"));
}
}
[06/12] isis git commit: ISIS-1194: removing unused methods from
ObjectActionParameter and implementataions.
Posted by da...@apache.org.
ISIS-1194: removing unused methods from ObjectActionParameter and implementataions.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/e618fdc6
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/e618fdc6
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/e618fdc6
Branch: refs/heads/ISIS-1213
Commit: e618fdc6ccd4ea2a052900f2196333f67c3df67c
Parents: 9f83958
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Oct 13 06:31:48 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Oct 13 06:31:48 2015 +0100
----------------------------------------------------------------------
.../spec/feature/ObjectActionParameter.java | 16 -----------
.../specimpl/ObjectActionParameterAbstract.java | 20 --------------
.../specimpl/OneToOneActionParameterImpl.java | 28 +++-----------------
3 files changed, 4 insertions(+), 60 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/e618fdc6/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
index a99967d..902faa8 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectActionParameter.java
@@ -34,22 +34,6 @@ import org.apache.isis.core.metamodel.interactions.ActionArgumentContext;
public interface ObjectActionParameter extends ObjectFeature, CurrentHolder {
/**
- * If true then can cast to a {@link OneToOneActionParameter}.
- *
- * <p>
- * Either this or {@link #isCollection()} will be true.
- * </p>
- */
- boolean isObject();
-
- /**
- * Only for symmetry with {@link ObjectAssociation}, however since the NOF
- * does not support collections as actions all implementations should return
- * <tt>false</tt>.
- */
- boolean isCollection();
-
- /**
* Owning {@link ObjectAction}.
*/
ObjectAction getAction();
http://git-wip-us.apache.org/repos/asf/isis/blob/e618fdc6/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 9a43566..4552f0a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -102,26 +102,6 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
}
-
-
- /**
- * Subclasses should override either {@link #isObject()} or
- * {@link #isCollection()}.
- */
- @Override
- public boolean isObject() {
- return false;
- }
-
- /**
- * Subclasses should override either {@link #isObject()} or
- * {@link #isCollection()}.
- */
- @Override
- public boolean isCollection() {
- return false;
- }
-
/**
* Parameter number, 0-based.
*/
http://git-wip-us.apache.org/repos/asf/isis/blob/e618fdc6/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
index 77b3598..7260d5a 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
@@ -24,32 +24,12 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
public class OneToOneActionParameterImpl extends ObjectActionParameterAbstract implements OneToOneActionParameter {
- public OneToOneActionParameterImpl(final int index, final ObjectActionImpl actionImpl, final TypedHolder peer) {
+ public OneToOneActionParameterImpl(
+ final int index,
+ final ObjectActionImpl actionImpl,
+ final TypedHolder peer) {
super(index, actionImpl, peer);
}
- @Override
- public boolean isObject() {
- return true;
- }
-
-
-// // //////////////////////////////////////////////////////////////////////
-// // get, set
-// // //////////////////////////////////////////////////////////////////////
-//
-// /**
-// * Sets the proposed value of the {@link Instance} (downcast as a
-// * {@link MutableProposedHolder}, unwrapped the proposed value from a
-// * {@link ObjectAdapter}.
-// */
-// public void set(final ObjectAdapter owner, final ObjectAdapter newValue) {
-// final MutableProposedHolder proposedHolder = getProposedHolder(owner);
-// final Object newValuePojo = newValue.getObject();
-// proposedHolder.setProposed(newValuePojo);
-// }
-
-
-
}
[10/12] isis git commit: ISIS-1213: renamed metamodel classes
("...Impl" to "...Default");
derive name of ObjectActionMixedIn from mixin type (if "_");
simplified logic of #getParameters; also...
Posted by da...@apache.org.
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
new file mode 100644
index 0000000..69019aa
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationDefault.java
@@ -0,0 +1,298 @@
+/*
+ * 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.specloader.specimpl;
+
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.commons.debug.DebugString;
+import org.apache.isis.core.commons.exceptions.IsisException;
+import org.apache.isis.core.commons.util.ToString;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.consent.InteractionResult;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionClearFacet;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
+import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.interactions.CollectionAddToContext;
+import org.apache.isis.core.metamodel.interactions.CollectionRemoveFromContext;
+import org.apache.isis.core.metamodel.interactions.CollectionUsabilityContext;
+import org.apache.isis.core.metamodel.interactions.CollectionVisibilityContext;
+import org.apache.isis.core.metamodel.interactions.InteractionUtils;
+import org.apache.isis.core.metamodel.interactions.UsabilityContext;
+import org.apache.isis.core.metamodel.interactions.ValidityContext;
+import org.apache.isis.core.metamodel.interactions.VisibilityContext;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
+import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
+
+public class OneToManyAssociationDefault extends ObjectAssociationAbstract implements OneToManyAssociation {
+
+ public OneToManyAssociationDefault(
+ final FacetedMethod facetedMethod,
+ final ObjectMemberDependencies objectMemberDependencies) {
+ this(facetedMethod, getSpecification(objectMemberDependencies.getSpecificationLoader(), facetedMethod.getType()),
+ objectMemberDependencies);
+ }
+
+ protected OneToManyAssociationDefault(
+ final FacetedMethod facetedMethod,
+ final ObjectSpecification objectSpec,
+ final ObjectMemberDependencies objectMemberDependencies) {
+ super(facetedMethod, FeatureType.COLLECTION, objectSpec, objectMemberDependencies);
+ }
+
+ @Override
+ public CollectionSemantics getCollectionSemantics() {
+ final Class<?> underlyingClass = getSpecification().getCorrespondingClass();
+ return getCollectionTypeRegistry().semanticsOf(underlyingClass);
+ }
+
+ //region > visible, usable
+
+ @Override
+ public VisibilityContext<?> createVisibleInteractionContext(
+ final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy,
+ Where where) {
+ return new CollectionVisibilityContext(ownerAdapter, getIdentifier(), interactionInitiatedBy, where);
+ }
+
+
+ @Override
+ public UsabilityContext<?> createUsableInteractionContext(
+ final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy,
+ Where where) {
+ return new CollectionUsabilityContext(ownerAdapter, getIdentifier(), interactionInitiatedBy, where);
+ }
+
+ //endregion
+
+ //region > Validate Add
+ // Not API
+ private ValidityContext<?> createValidateAddInteractionContext(
+ final InteractionInitiatedBy interactionInitiatedBy,
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter proposedToAddAdapter) {
+ return new CollectionAddToContext(ownerAdapter, getIdentifier(), proposedToAddAdapter,
+ interactionInitiatedBy);
+ }
+
+ @Override
+ public Consent isValidToAdd(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter proposedToAddAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return isValidToAddResult(ownerAdapter, proposedToAddAdapter, interactionInitiatedBy).createConsent();
+ }
+
+ private InteractionResult isValidToAddResult(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter proposedToAddAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ final ValidityContext<?> validityContext = createValidateAddInteractionContext(
+ interactionInitiatedBy, ownerAdapter, proposedToAddAdapter);
+ return InteractionUtils.isValidResult(this, validityContext);
+ }
+
+ //endregion
+
+ //region > Validate Remove
+ private ValidityContext<?> createValidateRemoveInteractionContext(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter proposedToRemoveAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return new CollectionRemoveFromContext(
+ ownerAdapter, getIdentifier(), proposedToRemoveAdapter, interactionInitiatedBy
+ );
+ }
+
+ @Override
+ public Consent isValidToRemove(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter proposedToRemoveAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return isValidToRemoveResult(
+ ownerAdapter, proposedToRemoveAdapter, interactionInitiatedBy).createConsent();
+ }
+
+ private InteractionResult isValidToRemoveResult(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter proposedToRemoveAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ final ValidityContext<?> validityContext = createValidateRemoveInteractionContext(
+ ownerAdapter, proposedToRemoveAdapter, interactionInitiatedBy);
+ return InteractionUtils.isValidResult(this, validityContext);
+ }
+
+ private boolean readWrite() {
+ return !isNotPersisted();
+ }
+
+ //endregion
+
+ //region > get, isEmpty, add, clear
+
+ @Override
+ public ObjectAdapter get(
+ final ObjectAdapter ownerAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+
+ final PropertyOrCollectionAccessorFacet accessor = getFacet(PropertyOrCollectionAccessorFacet.class);
+ final Object collection = accessor.getProperty(ownerAdapter,
+ interactionInitiatedBy);
+ if (collection == null) {
+ return null;
+ }
+ return getPersistenceSessionService().adapterFor(collection, ownerAdapter, this);
+ }
+
+ @Override
+ public boolean isEmpty(final ObjectAdapter parentAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
+ // REVIEW should we be able to determine if a collection is empty
+ // without loading it?
+ final ObjectAdapter collection = get(parentAdapter, interactionInitiatedBy);
+ final CollectionFacet facet = CollectionFacet.Utils.getCollectionFacetFromSpec(collection);
+ return facet.size(collection) == 0;
+ }
+
+ //endregion
+
+ //region > add, clear
+
+ @Override
+ public void addElement(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter referencedAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ if (referencedAdapter == null) {
+ throw new IllegalArgumentException("Can't use null to add an item to a collection");
+ }
+ if (readWrite()) {
+ if (ownerAdapter.representsPersistent() && referencedAdapter.isTransient()) {
+ throw new IsisException("can't set a reference to a transient object from a persistent one: " + ownerAdapter.titleString(null) + " (persistent) -> " + referencedAdapter.titleString() + " (transient)");
+ }
+ final CollectionAddToFacet facet = getFacet(CollectionAddToFacet.class);
+ facet.add(ownerAdapter, referencedAdapter, interactionInitiatedBy);
+ }
+ }
+
+ @Override
+ public void removeElement(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter referencedAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ if (referencedAdapter == null) {
+ throw new IllegalArgumentException("element should not be null");
+ }
+ if (readWrite()) {
+ final CollectionRemoveFromFacet facet = getFacet(CollectionRemoveFromFacet.class);
+ facet.remove(ownerAdapter, referencedAdapter, interactionInitiatedBy);
+ }
+ }
+
+ public void removeAllAssociations(final ObjectAdapter ownerAdapter) {
+ final CollectionClearFacet facet = getFacet(CollectionClearFacet.class);
+ facet.clear(ownerAdapter);
+ }
+
+ @Override
+ public void clearCollection(final ObjectAdapter ownerAdapter) {
+ if (readWrite()) {
+ final CollectionClearFacet facet = getFacet(CollectionClearFacet.class);
+ facet.clear(ownerAdapter);
+ }
+ }
+
+ //endregion
+
+ //region > defaults
+ @Override
+ public ObjectAdapter getDefault(final ObjectAdapter ownerAdapter) {
+ return null;
+ }
+
+ @Override
+ public void toDefault(final ObjectAdapter ownerAdapter) {
+ }
+
+ //endregion
+
+ //region > choices & autoComplete
+
+ @Override
+ public ObjectAdapter[] getChoices(
+ final ObjectAdapter ownerAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return new ObjectAdapter[0];
+ }
+
+ @Override
+ public boolean hasChoices() {
+ return false;
+ }
+
+
+ @Override
+ public boolean hasAutoComplete() {
+ return false;
+ }
+
+ @Override
+ public ObjectAdapter[] getAutoComplete(
+ ObjectAdapter object,
+ String searchArg,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return new ObjectAdapter[0];
+ }
+
+ @Override
+ public int getAutoCompleteMinLength() {
+ return 0; // n/a
+ }
+
+ //endregion
+
+ //region > debug, toString
+ @Override
+ public String debugData() {
+ final DebugString debugString = new DebugString();
+ debugString.indent();
+ debugString.indent();
+ getFacetedMethod().debugData(debugString);
+ return debugString.toString();
+ }
+
+ @Override
+ public String toString() {
+ final ToString str = new ToString(this);
+ str.append(super.toString());
+ str.append(",");
+ str.append("persisted", !isNotPersisted());
+ str.append("type", getSpecification() == null ? "unknown" : getSpecification().getShortIdentifier());
+ return str.toString();
+ }
+
+ //endregion
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
deleted file mode 100644
index fda40d2..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * 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.specloader.specimpl;
-
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.commons.debug.DebugString;
-import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.commons.util.ToString;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.consent.InteractionResult;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionClearFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
-import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.interactions.CollectionAddToContext;
-import org.apache.isis.core.metamodel.interactions.CollectionRemoveFromContext;
-import org.apache.isis.core.metamodel.interactions.CollectionUsabilityContext;
-import org.apache.isis.core.metamodel.interactions.CollectionVisibilityContext;
-import org.apache.isis.core.metamodel.interactions.InteractionUtils;
-import org.apache.isis.core.metamodel.interactions.UsabilityContext;
-import org.apache.isis.core.metamodel.interactions.ValidityContext;
-import org.apache.isis.core.metamodel.interactions.VisibilityContext;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
-import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
-
-public class OneToManyAssociationImpl extends ObjectAssociationAbstract implements OneToManyAssociation {
-
- public OneToManyAssociationImpl(
- final FacetedMethod facetedMethod,
- final ObjectMemberDependencies objectMemberDependencies) {
- this(facetedMethod, getSpecification(objectMemberDependencies.getSpecificationLoader(), facetedMethod.getType()),
- objectMemberDependencies);
- }
-
- protected OneToManyAssociationImpl(
- final FacetedMethod facetedMethod,
- final ObjectSpecification objectSpec,
- final ObjectMemberDependencies objectMemberDependencies) {
- super(facetedMethod, FeatureType.COLLECTION, objectSpec, objectMemberDependencies);
- }
-
- @Override
- public CollectionSemantics getCollectionSemantics() {
- final Class<?> underlyingClass = getSpecification().getCorrespondingClass();
- return getCollectionTypeRegistry().semanticsOf(underlyingClass);
- }
-
- //region > visible, usable
-
- @Override
- public VisibilityContext<?> createVisibleInteractionContext(
- final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy,
- Where where) {
- return new CollectionVisibilityContext(ownerAdapter, getIdentifier(), interactionInitiatedBy, where);
- }
-
-
- @Override
- public UsabilityContext<?> createUsableInteractionContext(
- final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy,
- Where where) {
- return new CollectionUsabilityContext(ownerAdapter, getIdentifier(), interactionInitiatedBy, where);
- }
-
- //endregion
-
- //region > Validate Add
- // Not API
- private ValidityContext<?> createValidateAddInteractionContext(
- final InteractionInitiatedBy interactionInitiatedBy,
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter proposedToAddAdapter) {
- return new CollectionAddToContext(ownerAdapter, getIdentifier(), proposedToAddAdapter,
- interactionInitiatedBy);
- }
-
- @Override
- public Consent isValidToAdd(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter proposedToAddAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return isValidToAddResult(ownerAdapter, proposedToAddAdapter, interactionInitiatedBy).createConsent();
- }
-
- private InteractionResult isValidToAddResult(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter proposedToAddAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- final ValidityContext<?> validityContext = createValidateAddInteractionContext(
- interactionInitiatedBy, ownerAdapter, proposedToAddAdapter);
- return InteractionUtils.isValidResult(this, validityContext);
- }
-
- //endregion
-
- //region > Validate Remove
- private ValidityContext<?> createValidateRemoveInteractionContext(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter proposedToRemoveAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return new CollectionRemoveFromContext(
- ownerAdapter, getIdentifier(), proposedToRemoveAdapter, interactionInitiatedBy
- );
- }
-
- @Override
- public Consent isValidToRemove(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter proposedToRemoveAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return isValidToRemoveResult(
- ownerAdapter, proposedToRemoveAdapter, interactionInitiatedBy).createConsent();
- }
-
- private InteractionResult isValidToRemoveResult(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter proposedToRemoveAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- final ValidityContext<?> validityContext = createValidateRemoveInteractionContext(
- ownerAdapter, proposedToRemoveAdapter, interactionInitiatedBy);
- return InteractionUtils.isValidResult(this, validityContext);
- }
-
- private boolean readWrite() {
- return !isNotPersisted();
- }
-
- //endregion
-
- //region > get, isEmpty, add, clear
-
- @Override
- public ObjectAdapter get(
- final ObjectAdapter ownerAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
-
- final PropertyOrCollectionAccessorFacet accessor = getFacet(PropertyOrCollectionAccessorFacet.class);
- final Object collection = accessor.getProperty(ownerAdapter,
- interactionInitiatedBy);
- if (collection == null) {
- return null;
- }
- return getPersistenceSessionService().adapterFor(collection, ownerAdapter, this);
- }
-
- @Override
- public boolean isEmpty(final ObjectAdapter parentAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
- // REVIEW should we be able to determine if a collection is empty
- // without loading it?
- final ObjectAdapter collection = get(parentAdapter, interactionInitiatedBy);
- final CollectionFacet facet = CollectionFacet.Utils.getCollectionFacetFromSpec(collection);
- return facet.size(collection) == 0;
- }
-
- //endregion
-
- //region > add, clear
-
- @Override
- public void addElement(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter referencedAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- if (referencedAdapter == null) {
- throw new IllegalArgumentException("Can't use null to add an item to a collection");
- }
- if (readWrite()) {
- if (ownerAdapter.representsPersistent() && referencedAdapter.isTransient()) {
- throw new IsisException("can't set a reference to a transient object from a persistent one: " + ownerAdapter.titleString(null) + " (persistent) -> " + referencedAdapter.titleString() + " (transient)");
- }
- final CollectionAddToFacet facet = getFacet(CollectionAddToFacet.class);
- facet.add(ownerAdapter, referencedAdapter, interactionInitiatedBy);
- }
- }
-
- @Override
- public void removeElement(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter referencedAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- if (referencedAdapter == null) {
- throw new IllegalArgumentException("element should not be null");
- }
- if (readWrite()) {
- final CollectionRemoveFromFacet facet = getFacet(CollectionRemoveFromFacet.class);
- facet.remove(ownerAdapter, referencedAdapter, interactionInitiatedBy);
- }
- }
-
- public void removeAllAssociations(final ObjectAdapter ownerAdapter) {
- final CollectionClearFacet facet = getFacet(CollectionClearFacet.class);
- facet.clear(ownerAdapter);
- }
-
- @Override
- public void clearCollection(final ObjectAdapter ownerAdapter) {
- if (readWrite()) {
- final CollectionClearFacet facet = getFacet(CollectionClearFacet.class);
- facet.clear(ownerAdapter);
- }
- }
-
- //endregion
-
- //region > defaults
- @Override
- public ObjectAdapter getDefault(final ObjectAdapter ownerAdapter) {
- return null;
- }
-
- @Override
- public void toDefault(final ObjectAdapter ownerAdapter) {
- }
-
- //endregion
-
- //region > choices & autoComplete
-
- @Override
- public ObjectAdapter[] getChoices(
- final ObjectAdapter ownerAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return new ObjectAdapter[0];
- }
-
- @Override
- public boolean hasChoices() {
- return false;
- }
-
-
- @Override
- public boolean hasAutoComplete() {
- return false;
- }
-
- @Override
- public ObjectAdapter[] getAutoComplete(
- ObjectAdapter object,
- String searchArg,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return new ObjectAdapter[0];
- }
-
- @Override
- public int getAutoCompleteMinLength() {
- return 0; // n/a
- }
-
- //endregion
-
- //region > debug, toString
- @Override
- public String debugData() {
- final DebugString debugString = new DebugString();
- debugString.indent();
- debugString.indent();
- getFacetedMethod().debugData(debugString);
- return debugString.toString();
- }
-
- @Override
- public String toString() {
- final ToString str = new ToString(this);
- str.append(super.toString());
- str.append(",");
- str.append("persisted", !isNotPersisted());
- str.append("type", getSpecification() == null ? "unknown" : getSpecification().getShortIdentifier());
- return str.toString();
- }
-
- //endregion
-
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
index f387d1f..00f4c89 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
@@ -23,7 +23,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-public class OneToOneActionParameterContributee extends OneToOneActionParameterImpl implements ObjectActionParameterContributee{
+public class OneToOneActionParameterContributee extends OneToOneActionParameterDefault implements ObjectActionParameterContributee{
private final ObjectAdapter serviceAdapter;
private final ObjectActionParameter serviceActionParameter;
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterDefault.java
new file mode 100644
index 0000000..65cf664
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterDefault.java
@@ -0,0 +1,35 @@
+/*
+ * 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.specloader.specimpl;
+
+import org.apache.isis.core.metamodel.facets.TypedHolder;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
+
+public class OneToOneActionParameterDefault extends ObjectActionParameterAbstract implements OneToOneActionParameter {
+
+ public OneToOneActionParameterDefault(
+ final int index,
+ final ObjectActionDefault actionImpl,
+ final TypedHolder peer) {
+ super(index, actionImpl, peer);
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
deleted file mode 100644
index 7260d5a..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * 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.specloader.specimpl;
-
-import org.apache.isis.core.metamodel.facets.TypedHolder;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
-
-public class OneToOneActionParameterImpl extends ObjectActionParameterAbstract implements OneToOneActionParameter {
-
- public OneToOneActionParameterImpl(
- final int index,
- final ObjectActionImpl actionImpl,
- final TypedHolder peer) {
- super(index, actionImpl, peer);
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
index d832cf8..1d4a7ce 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterMixedIn.java
@@ -22,7 +22,7 @@ import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-public class OneToOneActionParameterMixedIn extends OneToOneActionParameterImpl implements ObjectActionParameterMixedIn {
+public class OneToOneActionParameterMixedIn extends OneToOneActionParameterDefault implements ObjectActionParameterMixedIn {
private final ObjectActionParameter mixinParameter;
private final ObjectActionMixedIn mixedInAction;
@@ -56,4 +56,5 @@ public class OneToOneActionParameterMixedIn extends OneToOneActionParameterImpl
}
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
index 42997b9..61b0984 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
@@ -21,15 +21,12 @@ import java.util.List;
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.When;
import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.applib.filter.Filter;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.Facet;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facetapi.FacetHolderImpl;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
-import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacet;
import org.apache.isis.core.metamodel.facets.members.disabled.DisabledFacetForContributee;
@@ -42,7 +39,7 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAction;
import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
-public class OneToOneAssociationContributee extends OneToOneAssociationImpl implements ContributeeMember2 {
+public class OneToOneAssociationContributee extends OneToOneAssociationDefault implements ContributeeMember2 {
private final Object servicePojo;
private final ObjectAction serviceAction;
@@ -57,7 +54,7 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
public OneToOneAssociationContributee(
final Object servicePojo,
- final ObjectActionImpl serviceAction,
+ final ObjectActionDefault serviceAction,
final ObjectSpecification contributeeType,
final ObjectMemberDependencies objectMemberDependencies) {
super(serviceAction.getFacetedMethod(), serviceAction.getReturnType(), objectMemberDependencies);
@@ -145,62 +142,21 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
return InteractionUtils.isUsableResult(this, ic).createConsent();
}
- //region > FacetHolder
@Override
- public Class<? extends Facet>[] getFacetTypes() {
- return facetHolder.getFacetTypes();
+ protected FacetHolder getFacetHolder() {
+ return facetHolder;
}
- @Override
- public <T extends Facet> T getFacet(Class<T> cls) {
- return facetHolder.getFacet(cls);
- }
-
- @Override
- public boolean containsFacet(Class<? extends Facet> facetType) {
- return facetHolder.containsFacet(facetType);
- }
-
- @Override
- public boolean containsDoOpFacet(java.lang.Class<? extends Facet> facetType) {
- return facetHolder.containsDoOpFacet(facetType);
- }
-
- @Override
- public List<Facet> getFacets(Filter<Facet> filter) {
- return facetHolder.getFacets(filter);
- }
-
- @Override
- public void addFacet(Facet facet) {
- facetHolder.addFacet(facet);
- }
-
- @Override
- public void addFacet(MultiTypedFacet facet) {
- facetHolder.addFacet(facet);
- }
-
- @Override
- public void removeFacet(Facet facet) {
- facetHolder.removeFacet(facet);
- }
-
- @Override
- public void removeFacet(Class<? extends Facet> facetType) {
- facetHolder.removeFacet(facetType);
- }
-
- //endregion
-
private ObjectAdapter getServiceAdapter() {
return getPersistenceSessionService().adapterFor(servicePojo);
}
+ //region > Contributee2 impl - getServiceContributedBy()
@Override
public ObjectSpecification getServiceContributedBy() {
return getServiceAdapter().getSpecification();
}
+ //endregion
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
new file mode 100644
index 0000000..8089ca4
--- /dev/null
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationDefault.java
@@ -0,0 +1,345 @@
+/*
+ * 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.specloader.specimpl;
+
+import java.util.List;
+
+import com.google.common.collect.Lists;
+
+import org.apache.isis.applib.annotation.Where;
+import org.apache.isis.core.commons.debug.DebugString;
+import org.apache.isis.core.commons.exceptions.IsisException;
+import org.apache.isis.core.commons.util.ToString;
+import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
+import org.apache.isis.core.metamodel.consent.Consent;
+import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.isis.core.metamodel.consent.InteractionResult;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
+import org.apache.isis.core.metamodel.facets.param.autocomplete.MinLengthUtil;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
+import org.apache.isis.core.metamodel.facets.properties.autocomplete.PropertyAutoCompleteFacet;
+import org.apache.isis.core.metamodel.facets.properties.choices.PropertyChoicesFacet;
+import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.init.PropertyInitializationFacet;
+import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
+import org.apache.isis.core.metamodel.interactions.InteractionUtils;
+import org.apache.isis.core.metamodel.interactions.PropertyAccessContext;
+import org.apache.isis.core.metamodel.interactions.PropertyModifyContext;
+import org.apache.isis.core.metamodel.interactions.PropertyUsabilityContext;
+import org.apache.isis.core.metamodel.interactions.PropertyVisibilityContext;
+import org.apache.isis.core.metamodel.interactions.UsabilityContext;
+import org.apache.isis.core.metamodel.interactions.ValidityContext;
+import org.apache.isis.core.metamodel.interactions.VisibilityContext;
+import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import org.apache.isis.core.metamodel.spec.feature.MutableCurrentHolder;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
+import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
+
+public class OneToOneAssociationDefault extends ObjectAssociationAbstract implements OneToOneAssociation {
+
+ public OneToOneAssociationDefault(
+ final FacetedMethod facetedMethod,
+ final ObjectMemberDependencies objectMemberDependencies) {
+ this(facetedMethod, getSpecification(objectMemberDependencies.getSpecificationLoader(), facetedMethod.getType()),
+ objectMemberDependencies);
+ }
+
+ protected OneToOneAssociationDefault(
+ final FacetedMethod facetedMethod,
+ final ObjectSpecification objectSpec,
+ final ObjectMemberDependencies objectMemberDependencies) {
+ super(facetedMethod, FeatureType.PROPERTY, objectSpec, objectMemberDependencies);
+ }
+
+ //region > visible, usable
+
+ @Override
+ public VisibilityContext<?> createVisibleInteractionContext(
+ final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy,
+ Where where) {
+ return new PropertyVisibilityContext(ownerAdapter, getIdentifier(), interactionInitiatedBy, where);
+ }
+
+
+ @Override
+ public UsabilityContext<?> createUsableInteractionContext(
+ final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy,
+ Where where) {
+ return new PropertyUsabilityContext(ownerAdapter, getIdentifier(), interactionInitiatedBy, where);
+ }
+
+ //endregion
+
+ //region > Validity
+ private ValidityContext<?> createValidateInteractionContext(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter proposedToReferenceAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return new PropertyModifyContext(ownerAdapter, getIdentifier(), proposedToReferenceAdapter,
+ interactionInitiatedBy);
+ }
+
+ @Override
+ public Consent isAssociationValid(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter proposedAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ return isAssociationValidResult(ownerAdapter, proposedAdapter, interactionInitiatedBy).createConsent();
+ }
+
+ private InteractionResult isAssociationValidResult(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter proposedToReferenceAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ final ValidityContext<?> validityContext =
+ createValidateInteractionContext(
+ ownerAdapter, proposedToReferenceAdapter, interactionInitiatedBy
+ );
+ return InteractionUtils.isValidResult(this, validityContext);
+ }
+
+ //endregion
+
+ //region > init
+ @Override
+ public void initAssociation(final ObjectAdapter ownerAdapter, final ObjectAdapter referencedAdapter) {
+ final PropertyInitializationFacet initializerFacet = getFacet(PropertyInitializationFacet.class);
+ if (initializerFacet != null) {
+ initializerFacet.initProperty(ownerAdapter, referencedAdapter);
+ }
+ }
+
+ //endregion
+
+ //region > Access (get, isEmpty)
+
+ @Override
+ public ObjectAdapter get(
+ final ObjectAdapter ownerAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ final PropertyOrCollectionAccessorFacet facet = getFacet(PropertyOrCollectionAccessorFacet.class);
+ final Object referencedPojo =
+ facet.getProperty(ownerAdapter, interactionInitiatedBy);
+
+ if (referencedPojo == null) {
+ return null;
+ }
+
+ return getPersistenceSessionService().adapterFor(referencedPojo);
+ }
+
+ // UNUSED
+ private PropertyAccessContext createAccessInteractionContext(
+ final ObjectAdapter ownerAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ final ObjectAdapter referencedAdapter = get(ownerAdapter, interactionInitiatedBy);
+ return new PropertyAccessContext(
+ ownerAdapter, getIdentifier(), referencedAdapter, interactionInitiatedBy
+ );
+ }
+
+ @Override
+ public boolean isEmpty(final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
+ return get(ownerAdapter, interactionInitiatedBy) == null;
+ }
+
+ //endregion
+
+ //region > Set
+ @Override
+ public void set(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter newReferencedAdapter) {
+ set(ownerAdapter, newReferencedAdapter, InteractionInitiatedBy.USER);
+ }
+
+ @Override
+ public void set(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter newReferencedAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ if (newReferencedAdapter != null) {
+ setValue(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
+ } else {
+ clearValue(ownerAdapter, interactionInitiatedBy);
+ }
+ }
+
+ /**
+ * @see MutableCurrentHolder#set(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)
+ */
+ @Deprecated
+ @Override
+ public void setAssociation(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter newReferencedAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ setValue(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
+ }
+
+ private void setValue(
+ final ObjectAdapter ownerAdapter,
+ final ObjectAdapter newReferencedAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ final PropertySetterFacet setterFacet = getFacet(PropertySetterFacet.class);
+ if (setterFacet == null) {
+ return;
+ }
+ if (ownerAdapter.representsPersistent() && newReferencedAdapter != null && newReferencedAdapter.isTransient() && !newReferencedAdapter.getSpecification().isParented()) {
+ // TODO: move to facet ?
+ throw new IsisException("can't set a reference to a transient object from a persistent one: " + newReferencedAdapter.titleString(null) + " (transient)");
+ }
+ setterFacet.setProperty(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
+ }
+
+ /**
+ * @see MutableCurrentHolder#set(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)
+ */
+ @Deprecated
+ @Override
+ public void clearAssociation(
+ final ObjectAdapter ownerAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ clearValue(ownerAdapter, interactionInitiatedBy);
+ }
+
+ private void clearValue(
+ final ObjectAdapter ownerAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ final PropertyClearFacet facet = getFacet(PropertyClearFacet.class);
+ facet.clearProperty(ownerAdapter, interactionInitiatedBy);
+ }
+
+ //endregion
+
+ //region > defaults
+ @Override
+ public ObjectAdapter getDefault(final ObjectAdapter ownerAdapter) {
+ PropertyDefaultFacet propertyDefaultFacet = getFacet(PropertyDefaultFacet.class);
+ // if no default on the association, attempt to find a default on the
+ // specification (eg an int should
+ // default to 0).
+ if (propertyDefaultFacet == null || propertyDefaultFacet.isNoop()) {
+ propertyDefaultFacet = this.getSpecification().getFacet(PropertyDefaultFacet.class);
+ }
+ if (propertyDefaultFacet == null) {
+ return null;
+ }
+ return propertyDefaultFacet.getDefault(ownerAdapter);
+ }
+
+ @Override
+ public void toDefault(final ObjectAdapter ownerAdapter) {
+ // don't default optional fields
+ final MandatoryFacet mandatoryFacet = getFacet(MandatoryFacet.class);
+ if (mandatoryFacet != null && mandatoryFacet.isInvertedSemantics()) {
+ return;
+ }
+
+ final ObjectAdapter defaultValue = getDefault(ownerAdapter);
+ if (defaultValue != null) {
+ initAssociation(ownerAdapter, defaultValue);
+ }
+ }
+
+ //endregion
+
+ //region > choices and autoComplete
+ @Override
+ public boolean hasChoices() {
+ return getFacet(PropertyChoicesFacet.class) != null;
+ }
+
+ @Override
+ public ObjectAdapter[] getChoices(
+ final ObjectAdapter ownerAdapter,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ final PropertyChoicesFacet propertyChoicesFacet = getFacet(PropertyChoicesFacet.class);
+ if (propertyChoicesFacet == null) {
+ return null;
+ }
+ final Object[] pojoOptions = propertyChoicesFacet.getChoices(
+ ownerAdapter,
+ getSpecificationLoader(),
+ interactionInitiatedBy);
+ List<ObjectAdapter> adapters = Lists.transform(
+ Lists.newArrayList(pojoOptions), ObjectAdapter.Functions.adapterForUsing(getPersistenceSessionService()));
+ return adapters.toArray(new ObjectAdapter[]{});
+ }
+
+
+ @Override
+ public boolean hasAutoComplete() {
+ final PropertyAutoCompleteFacet propertyAutoCompleteFacet = getFacet(PropertyAutoCompleteFacet.class);
+ return propertyAutoCompleteFacet != null;
+ }
+
+ @Override
+ public ObjectAdapter[] getAutoComplete(
+ final ObjectAdapter ownerAdapter,
+ final String searchArg,
+ final InteractionInitiatedBy interactionInitiatedBy) {
+ final PropertyAutoCompleteFacet propertyAutoCompleteFacet = getFacet(PropertyAutoCompleteFacet.class);
+ final Object[] pojoOptions = propertyAutoCompleteFacet.autoComplete(ownerAdapter, searchArg,
+ interactionInitiatedBy);
+ if (pojoOptions != null) {
+ final ObjectAdapter[] options = new ObjectAdapter[pojoOptions.length];
+ for (int i = 0; i < options.length; i++) {
+ options[i] = getPersistenceSessionService().adapterFor(pojoOptions[i]);
+ }
+ return options;
+ }
+ return null;
+ }
+
+ @Override
+ public int getAutoCompleteMinLength() {
+ final PropertyAutoCompleteFacet propertyAutoCompleteFacet = getFacet(PropertyAutoCompleteFacet.class);
+ return propertyAutoCompleteFacet != null? propertyAutoCompleteFacet.getMinLength(): MinLengthUtil.MIN_LENGTH_DEFAULT;
+ }
+
+ //endregion
+
+ //region > debug, toString
+ @Override
+ public String debugData() {
+ final DebugString debugString = new DebugString();
+ debugString.indent();
+ debugString.indent();
+ getFacetedMethod().debugData(debugString);
+ return debugString.toString();
+ }
+
+ @Override
+ public String toString() {
+ final ToString str = new ToString(this);
+ str.append(super.toString());
+ str.setAddComma();
+ str.append("persisted", !isNotPersisted());
+ str.append("type", getSpecification().getShortIdentifier());
+ return str.toString();
+ }
+ //endregion
+
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
deleted file mode 100644
index 07874fa..0000000
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * 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.specloader.specimpl;
-
-import java.util.List;
-
-import com.google.common.collect.Lists;
-
-import org.apache.isis.applib.annotation.Where;
-import org.apache.isis.core.commons.debug.DebugString;
-import org.apache.isis.core.commons.exceptions.IsisException;
-import org.apache.isis.core.commons.util.ToString;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.Consent;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.consent.InteractionResult;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.objectvalue.mandatory.MandatoryFacet;
-import org.apache.isis.core.metamodel.facets.param.autocomplete.MinLengthUtil;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
-import org.apache.isis.core.metamodel.facets.properties.autocomplete.PropertyAutoCompleteFacet;
-import org.apache.isis.core.metamodel.facets.properties.choices.PropertyChoicesFacet;
-import org.apache.isis.core.metamodel.facets.properties.defaults.PropertyDefaultFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.clear.PropertyClearFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.init.PropertyInitializationFacet;
-import org.apache.isis.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
-import org.apache.isis.core.metamodel.interactions.InteractionUtils;
-import org.apache.isis.core.metamodel.interactions.PropertyAccessContext;
-import org.apache.isis.core.metamodel.interactions.PropertyModifyContext;
-import org.apache.isis.core.metamodel.interactions.PropertyUsabilityContext;
-import org.apache.isis.core.metamodel.interactions.PropertyVisibilityContext;
-import org.apache.isis.core.metamodel.interactions.UsabilityContext;
-import org.apache.isis.core.metamodel.interactions.ValidityContext;
-import org.apache.isis.core.metamodel.interactions.VisibilityContext;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.core.metamodel.spec.feature.MutableCurrentHolder;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
-
-public class OneToOneAssociationImpl extends ObjectAssociationAbstract implements OneToOneAssociation {
-
- public OneToOneAssociationImpl(
- final FacetedMethod facetedMethod,
- final ObjectMemberDependencies objectMemberDependencies) {
- this(facetedMethod, getSpecification(objectMemberDependencies.getSpecificationLoader(), facetedMethod.getType()),
- objectMemberDependencies);
- }
-
- protected OneToOneAssociationImpl(
- final FacetedMethod facetedMethod,
- final ObjectSpecification objectSpec,
- final ObjectMemberDependencies objectMemberDependencies) {
- super(facetedMethod, FeatureType.PROPERTY, objectSpec, objectMemberDependencies);
- }
-
- // /////////////////////////////////////////////////////////////
- // Hidden (or visible)
- // /////////////////////////////////////////////////////////////
-
- @Override
- public VisibilityContext<?> createVisibleInteractionContext(
- final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy,
- Where where) {
- return new PropertyVisibilityContext(ownerAdapter, getIdentifier(), interactionInitiatedBy, where);
- }
-
- // /////////////////////////////////////////////////////////////
- // Disabled (or enabled)
- // /////////////////////////////////////////////////////////////
-
- @Override
- public UsabilityContext<?> createUsableInteractionContext(
- final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy,
- Where where) {
- return new PropertyUsabilityContext(ownerAdapter, getIdentifier(), interactionInitiatedBy, where);
- }
-
- // /////////////////////////////////////////////////////////////
- // Validate
- // /////////////////////////////////////////////////////////////
-
- private ValidityContext<?> createValidateInteractionContext(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter proposedToReferenceAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return new PropertyModifyContext(ownerAdapter, getIdentifier(), proposedToReferenceAdapter,
- interactionInitiatedBy);
- }
-
- @Override
- public Consent isAssociationValid(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter proposedAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- return isAssociationValidResult(ownerAdapter, proposedAdapter, interactionInitiatedBy).createConsent();
- }
-
- private InteractionResult isAssociationValidResult(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter proposedToReferenceAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- final ValidityContext<?> validityContext =
- createValidateInteractionContext(
- ownerAdapter, proposedToReferenceAdapter, interactionInitiatedBy
- );
- return InteractionUtils.isValidResult(this, validityContext);
- }
-
- // /////////////////////////////////////////////////////////////
- // init
- // /////////////////////////////////////////////////////////////
-
- @Override
- public void initAssociation(final ObjectAdapter ownerAdapter, final ObjectAdapter referencedAdapter) {
- final PropertyInitializationFacet initializerFacet = getFacet(PropertyInitializationFacet.class);
- if (initializerFacet != null) {
- initializerFacet.initProperty(ownerAdapter, referencedAdapter);
- }
- }
-
- // /////////////////////////////////////////////////////////////
- // Access (get, isEmpty)
- // /////////////////////////////////////////////////////////////
-
- @Override
- public ObjectAdapter get(
- final ObjectAdapter ownerAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- final PropertyOrCollectionAccessorFacet facet = getFacet(PropertyOrCollectionAccessorFacet.class);
- final Object referencedPojo =
- facet.getProperty(ownerAdapter, interactionInitiatedBy);
-
- if (referencedPojo == null) {
- return null;
- }
-
- return getPersistenceSessionService().adapterFor(referencedPojo);
- }
-
- // UNUSED
- private PropertyAccessContext createAccessInteractionContext(
- final ObjectAdapter ownerAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- final ObjectAdapter referencedAdapter = get(ownerAdapter, interactionInitiatedBy);
- return new PropertyAccessContext(
- ownerAdapter, getIdentifier(), referencedAdapter, interactionInitiatedBy
- );
- }
-
- @Override
- public boolean isEmpty(final ObjectAdapter ownerAdapter, final InteractionInitiatedBy interactionInitiatedBy) {
- return get(ownerAdapter, interactionInitiatedBy) == null;
- }
-
- // /////////////////////////////////////////////////////////////
- // Set
- // /////////////////////////////////////////////////////////////
-
- @Override
- public void set(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter newReferencedAdapter) {
- set(ownerAdapter, newReferencedAdapter, InteractionInitiatedBy.USER);
- }
-
- @Override
- public void set(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter newReferencedAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- if (newReferencedAdapter != null) {
- setValue(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
- } else {
- clearValue(ownerAdapter, interactionInitiatedBy);
- }
- }
-
- /**
- * @see MutableCurrentHolder#set(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)
- */
- @Deprecated
- @Override
- public void setAssociation(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter newReferencedAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- setValue(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
- }
-
- private void setValue(
- final ObjectAdapter ownerAdapter,
- final ObjectAdapter newReferencedAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- final PropertySetterFacet setterFacet = getFacet(PropertySetterFacet.class);
- if (setterFacet == null) {
- return;
- }
- if (ownerAdapter.representsPersistent() && newReferencedAdapter != null && newReferencedAdapter.isTransient() && !newReferencedAdapter.getSpecification().isParented()) {
- // TODO: move to facet ?
- throw new IsisException("can't set a reference to a transient object from a persistent one: " + newReferencedAdapter.titleString(null) + " (transient)");
- }
- setterFacet.setProperty(ownerAdapter, newReferencedAdapter, interactionInitiatedBy);
- }
-
- /**
- * @see MutableCurrentHolder#set(ObjectAdapter, ObjectAdapter, InteractionInitiatedBy)
- */
- @Deprecated
- @Override
- public void clearAssociation(
- final ObjectAdapter ownerAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- clearValue(ownerAdapter, interactionInitiatedBy);
- }
-
- private void clearValue(
- final ObjectAdapter ownerAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- final PropertyClearFacet facet = getFacet(PropertyClearFacet.class);
- facet.clearProperty(ownerAdapter, interactionInitiatedBy);
- }
-
- // /////////////////////////////////////////////////////////////
- // defaults
- // /////////////////////////////////////////////////////////////
-
- @Override
- public ObjectAdapter getDefault(final ObjectAdapter ownerAdapter) {
- PropertyDefaultFacet propertyDefaultFacet = getFacet(PropertyDefaultFacet.class);
- // if no default on the association, attempt to find a default on the
- // specification (eg an int should
- // default to 0).
- if (propertyDefaultFacet == null || propertyDefaultFacet.isNoop()) {
- propertyDefaultFacet = this.getSpecification().getFacet(PropertyDefaultFacet.class);
- }
- if (propertyDefaultFacet == null) {
- return null;
- }
- return propertyDefaultFacet.getDefault(ownerAdapter);
- }
-
- @Override
- public void toDefault(final ObjectAdapter ownerAdapter) {
- // don't default optional fields
- final MandatoryFacet mandatoryFacet = getFacet(MandatoryFacet.class);
- if (mandatoryFacet != null && mandatoryFacet.isInvertedSemantics()) {
- return;
- }
-
- final ObjectAdapter defaultValue = getDefault(ownerAdapter);
- if (defaultValue != null) {
- initAssociation(ownerAdapter, defaultValue);
- }
- }
-
- // /////////////////////////////////////////////////////////////
- // choices and autoComplete
- // /////////////////////////////////////////////////////////////
-
- @Override
- public boolean hasChoices() {
- return getFacet(PropertyChoicesFacet.class) != null;
- }
-
- @Override
- public ObjectAdapter[] getChoices(
- final ObjectAdapter ownerAdapter,
- final InteractionInitiatedBy interactionInitiatedBy) {
- final PropertyChoicesFacet propertyChoicesFacet = getFacet(PropertyChoicesFacet.class);
- if (propertyChoicesFacet == null) {
- return null;
- }
- final Object[] pojoOptions = propertyChoicesFacet.getChoices(
- ownerAdapter,
- getSpecificationLoader(),
- interactionInitiatedBy);
- List<ObjectAdapter> adapters = Lists.transform(
- Lists.newArrayList(pojoOptions), ObjectAdapter.Functions.adapterForUsing(getPersistenceSessionService()));
- return adapters.toArray(new ObjectAdapter[]{});
- }
-
-
- @Override
- public boolean hasAutoComplete() {
- final PropertyAutoCompleteFacet propertyAutoCompleteFacet = getFacet(PropertyAutoCompleteFacet.class);
- return propertyAutoCompleteFacet != null;
- }
-
- @Override
- public ObjectAdapter[] getAutoComplete(
- final ObjectAdapter ownerAdapter,
- final String searchArg,
- final InteractionInitiatedBy interactionInitiatedBy) {
- final PropertyAutoCompleteFacet propertyAutoCompleteFacet = getFacet(PropertyAutoCompleteFacet.class);
- final Object[] pojoOptions = propertyAutoCompleteFacet.autoComplete(ownerAdapter, searchArg,
- interactionInitiatedBy);
- if (pojoOptions != null) {
- final ObjectAdapter[] options = new ObjectAdapter[pojoOptions.length];
- for (int i = 0; i < options.length; i++) {
- options[i] = getPersistenceSessionService().adapterFor(pojoOptions[i]);
- }
- return options;
- }
- return null;
- }
-
- @Override
- public int getAutoCompleteMinLength() {
- final PropertyAutoCompleteFacet propertyAutoCompleteFacet = getFacet(PropertyAutoCompleteFacet.class);
- return propertyAutoCompleteFacet != null? propertyAutoCompleteFacet.getMinLength(): MinLengthUtil.MIN_LENGTH_DEFAULT;
- }
-
-
- // /////////////////////////////////////////////////////////////
- // debug, toString
- // /////////////////////////////////////////////////////////////
-
- @Override
- public String debugData() {
- final DebugString debugString = new DebugString();
- debugString.indent();
- debugString.indent();
- getFacetedMethod().debugData(debugString);
- return debugString.toString();
- }
-
- @Override
- public String toString() {
- final ToString str = new ToString(this);
- str.append(super.toString());
- str.setAddComma();
- str.append("persisted", !isNotPersisted());
- str.append("type", getSpecification().getShortIdentifier());
- return str.toString();
- }
-
-
-}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
index 2e0512f..071f760 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
@@ -65,10 +65,10 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
import org.apache.isis.core.metamodel.specloader.classsubstitutor.ClassSubstitutor;
import org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilder;
import org.apache.isis.core.metamodel.specloader.specimpl.FacetedMethodsBuilderContext;
-import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionImpl;
+import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionDefault;
import org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbstract;
-import org.apache.isis.core.metamodel.specloader.specimpl.OneToManyAssociationImpl;
-import org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationImpl;
+import org.apache.isis.core.metamodel.specloader.specimpl.OneToManyAssociationDefault;
+import org.apache.isis.core.metamodel.specloader.specimpl.OneToOneAssociationDefault;
public class ObjectSpecificationDefault extends ObjectSpecificationAbstract implements DebuggableWithTitle, FacetHolder {
@@ -223,9 +223,9 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
private ObjectAssociation createAssociation(final FacetedMethod facetMethod) {
if (facetMethod.getFeatureType().isCollection()) {
- return new OneToManyAssociationImpl(facetMethod, objectMemberDependencies);
+ return new OneToManyAssociationDefault(facetMethod, objectMemberDependencies);
} else if (facetMethod.getFeatureType().isProperty()) {
- return new OneToOneAssociationImpl(facetMethod, objectMemberDependencies);
+ return new OneToOneAssociationDefault(facetMethod, objectMemberDependencies);
} else {
return null;
}
@@ -246,7 +246,7 @@ public class ObjectSpecificationDefault extends ObjectSpecificationAbstract impl
private ObjectAction createAction(final FacetedMethod facetedMethod) {
if (facetedMethod.getFeatureType().isAction()) {
- return new ObjectActionImpl(facetedMethod, objectMemberDependencies);
+ return new ObjectActionDefault(facetedMethod, objectMemberDependencies);
} else {
return null;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
new file mode 100644
index 0000000..fdb3eaf
--- /dev/null
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedInTest.java
@@ -0,0 +1,44 @@
+package org.apache.isis.core.metamodel.specloader.specimpl;
+
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+public class ObjectActionMixedInTest {
+
+
+ public static class SuffixAfterUnderscore extends ObjectActionMixedInTest {
+
+ @Test
+ public void exactly_underscore() throws Exception {
+ final String s = ObjectActionMixedIn.suffixAfterUnderscore("_");
+ assertThat(s, is("_"));
+ }
+
+ @Test
+ public void ends_with_underscore() throws Exception {
+ final String s = ObjectActionMixedIn.suffixAfterUnderscore("abc_");
+ assertThat(s, is("Abc_"));
+ }
+
+ @Test
+ public void has_no_underscore() throws Exception {
+ final String s = ObjectActionMixedIn.suffixAfterUnderscore("defghij");
+ assertThat(s, is("Defghij"));
+ }
+
+ @Test
+ public void contains_one_underscore() throws Exception {
+ final String s = ObjectActionMixedIn.suffixAfterUnderscore("abc_def");
+ assertThat(s, is("Def"));
+ }
+
+ @Test
+ public void contains_more_than_one_underscore() throws Exception {
+ final String s = ObjectActionMixedIn.suffixAfterUnderscore("abc_def_ghi");
+ assertThat(s, is("Ghi"));
+ }
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
index a115fda..5bf63dc 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
@@ -37,7 +37,6 @@ import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.TypedHolder;
import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
-import org.apache.isis.core.metamodel.spec.Instance;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
@@ -49,7 +48,7 @@ public class ObjectActionParameterAbstractTest_getId_and_getName {
public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
@Mock
- private ObjectActionImpl parentAction;
+ private ObjectActionDefault parentAction;
@Mock
private TypedHolder actionParamPeer;
@Mock
@@ -64,7 +63,7 @@ public class ObjectActionParameterAbstractTest_getId_and_getName {
private final static class ObjectActionParameterAbstractToTest extends ObjectActionParameterAbstract {
- private ObjectActionParameterAbstractToTest(final int number, final ObjectActionImpl objectAction, final TypedHolder peer) {
+ private ObjectActionParameterAbstractToTest(final int number, final ObjectActionDefault objectAction, final TypedHolder peer) {
super(number, objectAction, peer);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionDefaultTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionDefaultTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionDefaultTest.java
new file mode 100644
index 0000000..7e446c1
--- /dev/null
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionDefaultTest.java
@@ -0,0 +1,107 @@
+/*
+ * 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.runtime.system;
+
+import org.jmock.Expectations;
+import org.jmock.auto.Mock;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.apache.isis.applib.Identifier;
+import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
+import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
+import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerService;
+import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
+import org.apache.isis.core.metamodel.facets.FacetedMethod;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
+import org.apache.isis.core.metamodel.facets.all.named.NamedFacetAbstract;
+import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
+import org.apache.isis.core.metamodel.spec.SpecificationLoader;
+import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
+import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionDefault;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
+import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
+public class ObjectActionDefaultTest {
+
+ @Rule
+ public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
+
+
+ private ObjectActionDefault action;
+
+ @Mock
+ private FacetedMethod mockFacetedMethod;
+
+ @Mock
+ private AuthenticationSessionProvider mockAuthenticationSessionProvider;
+ @Mock
+ private SpecificationLoader mockSpecificationLookup;
+ @Mock
+ private AdapterManager mockAdapterManager;
+ @Mock
+ private ServicesInjector mockServicesInjector;
+ @Mock
+ private MessageBrokerService mockMessageBrokerService;
+ @Mock
+ private PersistenceSessionService mockPersistenceSessionService;
+
+ @Before
+ public void setUp() throws Exception {
+
+ context.checking(new Expectations() {
+ {
+ one(mockFacetedMethod).getIdentifier();
+ will(returnValue(Identifier.actionIdentifier("Customer", "reduceheadcount")));
+ }
+ });
+
+ action = new ObjectActionDefault(mockFacetedMethod, new ObjectMemberDependencies(
+ mockSpecificationLookup, mockServicesInjector,
+ mockPersistenceSessionService));
+ }
+
+
+ @Test
+ public void testNameDefaultsToActionsMethodName() {
+ final String name = "Reduceheadcount";
+ final NamedFacet facet = new NamedFacetAbstract(name, true, mockFacetedMethod) {
+ };
+ context.checking(new Expectations() {
+ {
+ one(mockFacetedMethod).getFacet(NamedFacet.class);
+ will(returnValue(facet));
+ }
+ });
+ assertThat(action.getName(), is(equalTo(name)));
+ }
+
+ @Test
+ public void testId() {
+ assertEquals("reduceheadcount", action.getId());
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/isis/blob/6c888136/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java
deleted file mode 100644
index 307ff00..0000000
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectActionImplTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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.runtime.system;
-
-import org.jmock.Expectations;
-import org.jmock.auto.Mock;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.apache.isis.applib.Identifier;
-import org.apache.isis.core.commons.authentication.AuthenticationSessionProvider;
-import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
-import org.apache.isis.core.metamodel.runtimecontext.MessageBrokerService;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
-import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacet;
-import org.apache.isis.core.metamodel.facets.all.named.NamedFacetAbstract;
-import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
-import org.apache.isis.core.metamodel.spec.SpecificationLoader;
-import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
-import org.apache.isis.core.metamodel.specloader.specimpl.ObjectActionImpl;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2;
-import org.apache.isis.core.unittestsupport.jmocking.JUnitRuleMockery2.Mode;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-
-public class ObjectActionImplTest {
-
- @Rule
- public JUnitRuleMockery2 context = JUnitRuleMockery2.createFor(Mode.INTERFACES_AND_CLASSES);
-
-
- private ObjectActionImpl action;
-
- @Mock
- private FacetedMethod mockFacetedMethod;
-
- @Mock
- private AuthenticationSessionProvider mockAuthenticationSessionProvider;
- @Mock
- private SpecificationLoader mockSpecificationLookup;
- @Mock
- private AdapterManager mockAdapterManager;
- @Mock
- private ServicesInjector mockServicesInjector;
- @Mock
- private MessageBrokerService mockMessageBrokerService;
- @Mock
- private PersistenceSessionService mockPersistenceSessionService;
-
- @Before
- public void setUp() throws Exception {
-
- context.checking(new Expectations() {
- {
- one(mockFacetedMethod).getIdentifier();
- will(returnValue(Identifier.actionIdentifier("Customer", "reduceheadcount")));
- }
- });
-
- action = new ObjectActionImpl(mockFacetedMethod, new ObjectMemberDependencies(
- mockSpecificationLookup, mockServicesInjector,
- mockPersistenceSessionService));
- }
-
-
- @Test
- public void testNameDefaultsToActionsMethodName() {
- final String name = "Reduceheadcount";
- final NamedFacet facet = new NamedFacetAbstract(name, true, mockFacetedMethod) {
- };
- context.checking(new Expectations() {
- {
- one(mockFacetedMethod).getFacet(NamedFacet.class);
- will(returnValue(facet));
- }
- });
- assertThat(action.getName(), is(equalTo(name)));
- }
-
- @Test
- public void testId() {
- assertEquals("reduceheadcount", action.getId());
- }
-
-}
[04/12] isis git commit: ISIS-1194: deleting
Specification#getInstance() and implementations - never used.
Posted by da...@apache.org.
ISIS-1194: deleting Specification#getInstance() and implementations - never used.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/49dc51be
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/49dc51be
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/49dc51be
Branch: refs/heads/ISIS-1213
Commit: 49dc51be61ea5d0690134bf1cee60f5752ab324d
Parents: 9961b39
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Mon Oct 12 23:55:39 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Mon Oct 12 23:55:39 2015 +0100
----------------------------------------------------------------------
.../isis/core/metamodel/spec/Specification.java | 27 +-------------------
.../specloader/specimpl/ObjectActionImpl.java | 9 -------
.../ObjectActionParameterParseable.java | 14 ++--------
.../specimpl/ObjectSpecificationAbstract.java | 12 ---------
.../specimpl/OneToManyAssociationImpl.java | 10 --------
.../specimpl/OneToOneActionParameterImpl.java | 10 --------
.../specimpl/OneToOneAssociationImpl.java | 10 --------
...ParameterAbstractTest_getId_and_getName.java | 5 ----
.../specimpl/ObjectAssociationAbstractTest.java | 5 ----
...ectAssociationAbstractTest_alwaysHidden.java | 5 ----
.../testspec/ObjectSpecificationStub.java | 14 ++++------
.../system/ObjectMemberAbstractTest.java | 12 +++------
12 files changed, 12 insertions(+), 121 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/49dc51be/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Specification.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Specification.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Specification.java
index 07d82c1..88ee27d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Specification.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Specification.java
@@ -19,13 +19,11 @@
package org.apache.isis.core.metamodel.spec;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facetapi.IdentifiedHolder;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.core.metamodel.spec.feature.ObjectFeature;
import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
-import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
/**
* Base interface for elements of the metamodel.
@@ -44,32 +42,9 @@ public interface Specification extends IdentifiedHolder {
FeatureType getFeatureType();
/**
- * Returns a description of how the member is used - this complements the
- * help text.
- *
- * @see #getHelp()
+ * Returns a description of how the member is used.
*/
String getDescription();
- /**
- * Return an {@link Instance} of this {@link Specification} with respect to
- * the provided {@link ObjectAdapter}.
- *
- * <p>
- * For example, if the {@link Specification} is a
- * {@link OneToOneAssociation}, then is an {@link Instance} implementation
- * representing the { {@link ObjectAdapter}/ {@link OneToOneAssociation}
- * tuple.
- *
- * <p>
- * Implementations are expected to use a double-dispatch back to the
- * provided {@link ObjectAdapter} (passing themselves as a parameter), using
- * {@link ObjectAdapter#getInstance(Specification)}.
- *
- * <p>
- * Note: this method may throw an {@link UnsupportedOperationException}; see
- * {@link ObjectAdapter#getInstance(Specification)} for details.
- */
- Instance getInstance(final ObjectAdapter adapter);
}
http://git-wip-us.apache.org/repos/asf/isis/blob/49dc51be/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
index 4d6ac09..02e63a9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
@@ -137,15 +137,6 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
return facet != null? facet.value(): ActionSemantics.Of.NON_IDEMPOTENT;
}
- // /////////////////////////////////////////////////////////////
- // getInstance
- // /////////////////////////////////////////////////////////////
-
- @Override
- public Instance getInstance(final ObjectAdapter adapter) {
- final ObjectAction specification = this;
- return adapter.getInstance(specification);
- }
// /////////////////////////////////////////////////////////////
// Type, IsContributed
http://git-wip-us.apache.org/repos/asf/isis/blob/49dc51be/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
index 40318c2..4aa2c5e 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
@@ -60,23 +60,13 @@ public class ObjectActionParameterParseable extends ObjectActionParameterAbstrac
}
- // /////////////////////////////////////////////////////////////
- // getInstance
- // /////////////////////////////////////////////////////////////
-
- @Override
- public Instance getInstance(final ObjectAdapter adapter) {
- final OneToOneActionParameter specification = this;
- return adapter.getInstance(specification);
- }
-
// //////////////////////////////////////////////////////////////////////
// get, set
// //////////////////////////////////////////////////////////////////////
/**
* Gets the proposed value of the {@link Instance} (downcast as a
- * {@link MutableProposed}, wrapping the proposed value into a
+ * {@link MutableProposedHolder}, wrapping the proposed value into a
* {@link ObjectAdapter}.
*/
@Override
@@ -88,7 +78,7 @@ public class ObjectActionParameterParseable extends ObjectActionParameterAbstrac
/**
* Sets the proposed value of the {@link Instance} (downcast as a
- * {@link MutableProposed}, unwrapped the proposed value from a
+ * {@link MutableProposedHolder}, unwrapped the proposed value from a
* {@link ObjectAdapter}.
*/
public void set(final ObjectAdapter owner, final ObjectAdapter newValue) {
http://git-wip-us.apache.org/repos/asf/isis/blob/49dc51be/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 0ee3b2b..548bf43 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -423,18 +423,6 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
//endregion
- //region > getInstance (unused)
-
- /**
- * simply returns the input parameter.
- */
- @Deprecated
- @Override
- public Instance getInstance(final ObjectAdapter adapter) {
- return adapter;
- }
- //endregion
-
//region > Hierarchical
/**
* Determines if this class represents the same class, or a subclass, of the
http://git-wip-us.apache.org/repos/asf/isis/blob/49dc51be/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
index 093523d..41291a1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
@@ -280,16 +280,6 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
}
// /////////////////////////////////////////////////////////////
- // getInstance
- // /////////////////////////////////////////////////////////////
-
- @Override
- public Instance getInstance(final ObjectAdapter adapter) {
- final OneToManyAssociation specification = this;
- return adapter.getInstance(specification);
- }
-
- // /////////////////////////////////////////////////////////////
// debug, toString
// /////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/49dc51be/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
index 1cbf084..ece1864 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
@@ -44,16 +44,6 @@ public class OneToOneActionParameterImpl extends ObjectActionParameterAbstract i
}
- // /////////////////////////////////////////////////////////////
- // getInstance
- // /////////////////////////////////////////////////////////////
-
- @Override
- public Instance getInstance(final ObjectAdapter adapter) {
- final OneToOneActionParameter specification = this;
- return adapter.getInstance(specification);
- }
-
// //////////////////////////////////////////////////////////////////////
// get, set
// //////////////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/49dc51be/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
index 955530a..94d70e1 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
@@ -326,16 +326,6 @@ public class OneToOneAssociationImpl extends ObjectAssociationAbstract implement
// /////////////////////////////////////////////////////////////
- // getInstance
- // /////////////////////////////////////////////////////////////
-
- @Override
- public Instance getInstance(final ObjectAdapter ownerAdapter) {
- final OneToOneAssociation specification = this;
- return ownerAdapter.getInstance(specification);
- }
-
- // /////////////////////////////////////////////////////////////
// debug, toString
// /////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/isis/blob/49dc51be/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
index 259c999..a115fda 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstractTest_getId_and_getName.java
@@ -76,11 +76,6 @@ public class ObjectActionParameterAbstractTest_getId_and_getName {
}
@Override
- public Instance getInstance(final ObjectAdapter adapter) {
- return null;
- }
-
- @Override
public FeatureType getFeatureType() {
return null;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/49dc51be/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
index 80894f4..5ad8d26 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest.java
@@ -122,11 +122,6 @@ public class ObjectAssociationAbstractTest {
}
@Override
- public Instance getInstance(final ObjectAdapter adapter) {
- return null;
- }
-
- @Override
public boolean containsDoOpFacet(final Class<? extends Facet> facetType) {
return false;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/49dc51be/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
index ee765cd..1c8da27 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstractTest_alwaysHidden.java
@@ -117,11 +117,6 @@ public class ObjectAssociationAbstractTest_alwaysHidden {
}
@Override
- public Instance getInstance(final ObjectAdapter adapter) {
- return null;
- }
-
- @Override
public boolean containsDoOpFacet(final Class<? extends Facet> facetType) {
return false;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/49dc51be/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
index a56a549..7f405c0 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/testspec/ObjectSpecificationStub.java
@@ -363,15 +363,11 @@ public class ObjectSpecificationStub extends FacetHolderImpl implements ObjectSp
return null;
}
- // /////////////////////////////////////////////////////////////
- // getInstance
- // /////////////////////////////////////////////////////////////
-
- @Override
- public ObjectAdapter getInstance(final ObjectAdapter adapter) {
- return adapter;
- }
-
+ /**
+ * @deprecated - unused ?
+ * @return
+ */
+ @Deprecated
public RuntimeContext getRuntimeContext() {
return runtimeContext;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/49dc51be/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
index 0f8b0f9..3af1e0e 100644
--- a/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
+++ b/core/runtime/src/test/java/org/apache/isis/core/runtime/system/ObjectMemberAbstractTest.java
@@ -280,6 +280,10 @@ class ObjectMemberAbstractImpl extends ObjectMemberAbstract {
return null;
}
+ /**
+ * @deprecated - unused ?
+ */
+ @Deprecated
public Consent isUsable(final ObjectAdapter target) {
return null;
}
@@ -304,13 +308,5 @@ class ObjectMemberAbstractImpl extends ObjectMemberAbstract {
where);
}
- // /////////////////////////////////////////////////////////////
- // getInstance
- // /////////////////////////////////////////////////////////////
-
- @Override
- public Instance getInstance(final ObjectAdapter adapter) {
- return null;
- }
}
[08/12] isis git commit: ISIS-1194: converting regions to use
IntelliJ-style. Removing one or two unused instance vars.
Posted by da...@apache.org.
ISIS-1194: converting regions to use IntelliJ-style. Removing one or two unused instance vars.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/9f251d9c
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/9f251d9c
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/9f251d9c
Branch: refs/heads/ISIS-1213
Commit: 9f251d9c9db58fac4e252a7304067cf5de14a32c
Parents: c62f937
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Oct 13 06:59:33 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Oct 13 06:59:33 2015 +0100
----------------------------------------------------------------------
.../specimpl/ObjectActionContributee.java | 2 +-
.../specloader/specimpl/ObjectActionImpl.java | 66 +++++++++-----------
.../specimpl/ObjectActionMixedIn.java | 3 -
.../specimpl/ObjectActionParameterAbstract.java | 46 ++++++--------
.../ObjectActionParameterContributee.java | 1 -
.../specimpl/ObjectAssociationAbstract.java | 1 -
.../specimpl/ObjectMemberAbstract.java | 52 +++++++--------
.../OneToManyAssociationContributee.java | 9 ++-
.../specimpl/OneToManyAssociationImpl.java | 50 +++++++--------
.../OneToOneActionParameterContributee.java | 8 ---
.../OneToOneAssociationContributee.java | 9 ++-
.../specimpl/OneToOneAssociationImpl.java | 10 ++-
12 files changed, 109 insertions(+), 148 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/9f251d9c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
index 8fcf8d8..fe1a5df 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionContributee.java
@@ -137,7 +137,7 @@ public class ObjectActionContributee extends ObjectActionImpl implements Contrib
(ObjectActionParameterAbstract) serviceParameters.get(serviceParamNum);
final ObjectActionParameterContributee contributedParam;
contributedParam = new OneToOneActionParameterContributee(
- getServiceAdapter(), serviceAction, serviceParameter, serviceParamNum,
+ getServiceAdapter(), serviceParameter,
contributeeParamNum, this);
contributeeParameters.add(contributedParam);
http://git-wip-us.apache.org/repos/asf/isis/blob/9f251d9c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
index cdc0d56..ae38776 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
@@ -67,6 +67,7 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectAction {
+
private final static Logger LOG = LoggerFactory.getLogger(ObjectActionImpl.class);
public static ActionType getType(final String typeStr) {
@@ -77,25 +78,24 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
return type;
}
+ //region > fields
/**
* Lazily initialized by {@link #getParameters()} (so don't use directly!)
*/
private List<ObjectActionParameter> parameters;
-
- // //////////////////////////////////////////////////////////////////
- // Constructors
- // //////////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > constructors
public ObjectActionImpl(final FacetedMethod facetedMethod, final ObjectMemberDependencies objectMemberDependencies) {
super(facetedMethod, FeatureType.ACTION, objectMemberDependencies);
}
- // //////////////////////////////////////////////////////////////////
- // ReturnType, OnType, Actions (set)
- // //////////////////////////////////////////////////////////////////
+ //endregion
+ //region > ReturnType, OnType, Actions (set)
/**
* Always returns <tt>null</tt>.
*/
@@ -136,11 +136,9 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
return facet != null? facet.value(): ActionSemantics.Of.NON_IDEMPOTENT;
}
+ //endregion
- // /////////////////////////////////////////////////////////////
- // Type, IsContributed
- // /////////////////////////////////////////////////////////////
-
+ //region > Type
@Override
public ActionType getType() {
return getType(this);
@@ -161,10 +159,9 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
}
return ActionType.USER;
}
+ //endregion
- // /////////////////////////////////////////////////////////////
- // Parameters
- // /////////////////////////////////////////////////////////////
+ //region > Parameters
@Override
public int getParameterCount() {
@@ -264,9 +261,9 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
return parameters.get(position);
}
- // /////////////////////////////////////////////////////////////
- // Visible (or hidden)
- // /////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > visable, usable
@Override
public VisibilityContext<?> createVisibleInteractionContext(
@@ -275,20 +272,15 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
return new ActionVisibilityContext(targetObjectAdapter, getIdentifier(), interactionInitiatedBy, where);
}
- // /////////////////////////////////////////////////////////////
- // Usable (or disabled)
- // /////////////////////////////////////////////////////////////
-
@Override
public UsabilityContext<?> createUsableInteractionContext(
final ObjectAdapter targetObjectAdapter, final InteractionInitiatedBy interactionInitiatedBy,
Where where) {
return new ActionUsabilityContext(targetObjectAdapter, getIdentifier(), interactionInitiatedBy, where);
}
+ //endregion
- // //////////////////////////////////////////////////////////////////
- // validate
- // //////////////////////////////////////////////////////////////////
+ //region > validate
@Override
public Consent isProposedArgumentSetValid(
@@ -331,9 +323,9 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
interactionInitiatedBy);
}
- // //////////////////////////////////////////////////////////////////
- // executeWithRuleChecking, execute
- // //////////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > executeWithRuleChecking, execute
@Override
public ObjectAdapter executeWithRuleChecking(
@@ -381,9 +373,9 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
}
- // //////////////////////////////////////////////////////////////////
- // defaults
- // //////////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > defaults
@Override
public ObjectAdapter[] getDefaults(final ObjectAdapter target) {
@@ -437,9 +429,9 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
return pojo == null ? null : getPersistenceSessionService().adapterFor(pojo);
}
- // /////////////////////////////////////////////////////////////
- // options (choices)
- // /////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > choices
@Override
public ObjectAdapter[][] getChoices(
@@ -506,9 +498,9 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
return parameterChoicesAdapters;
}
- // //////////////////////////////////////////////////////////////////
- // debug, toString
- // //////////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > debug, toString
@Override
public String debugData() {
@@ -537,5 +529,7 @@ public class ObjectActionImpl extends ObjectMemberAbstract implements ObjectActi
return sb.toString();
}
+ //endregion
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/9f251d9c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
index 9574080..64b48e7 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionMixedIn.java
@@ -110,7 +110,6 @@ public class ObjectActionMixedIn extends ObjectActionImpl implements MixedInMemb
}
public synchronized List<ObjectActionParameter> getParameters() {
- //return mixinAction.getParameters();
if (this.parameters == null) {
final List<ObjectActionParameter> mixinActionParameters = mixinAction.getParameters();
@@ -195,8 +194,6 @@ public class ObjectActionMixedIn extends ObjectActionImpl implements MixedInMemb
bulkInteractionContext.setInvokedAs(Bulk.InteractionContext.InvokedAs.REGULAR);
actionInvocationContext.setDomainObjects(Collections.singletonList(mixedInAdapter.getObject()));
}
-
-
}
final CommandContext commandContext = getServicesInjector().lookupService(CommandContext.class);
http://git-wip-us.apache.org/repos/asf/isis/blob/9f251d9c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 4552f0a..81bff3d 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -67,8 +67,6 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
private final ObjectActionImpl parentAction;
private final TypedHolder peer;
-
-
protected ObjectActionParameterAbstract(final int number, final ObjectActionImpl objectAction, final TypedHolder peer) {
this.number = number;
this.parentAction = objectAction;
@@ -93,7 +91,6 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
return getAdapterMap().adapterFor(proposed);
}
-
protected MutableProposedHolder getProposedHolder(final ObjectAdapter owner) {
if (!(owner instanceof MutableProposedHolder)) {
throw new IllegalArgumentException("Instance should implement MutableProposedHolder");
@@ -101,7 +98,6 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
return (MutableProposedHolder) owner;
}
-
/**
* Parameter number, 0-based.
*/
@@ -116,9 +112,10 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
}
/**
- * NOT API, but exposed for the benefit of {@link ObjectActionParameterContributee}.
+ * NOT API, but exposed for the benefit of {@link ObjectActionParameterContributee}
+ * and {@link ObjectActionParameterMixedIn}.
*/
- public TypedHolder getPeer() {
+ TypedHolder getPeer() {
return peer;
}
@@ -199,9 +196,7 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
return Allow.DEFAULT;
}
- // //////////////////////////////////////////////////////////
- // FacetHolder
- // //////////////////////////////////////////////////////////
+ //region > FacetHolder
@Override
public boolean containsFacet(final Class<? extends Facet> facetType) {
@@ -257,10 +252,9 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
}
}
+ //endregion
- // /////////////////////////////////////////////////////////////
- // AutoComplete
- // /////////////////////////////////////////////////////////////
+ //region > AutoComplete
@Override
public boolean hasAutoComplete() {
@@ -300,10 +294,9 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
return facet != null? facet.getMinLength(): MinLengthUtil.MIN_LENGTH_DEFAULT;
}
+ //endregion
- // /////////////////////////////////////////////////////////////
- // Choices
- // /////////////////////////////////////////////////////////////
+ //region > Choices
@Override
public boolean hasChoices() {
@@ -348,10 +341,10 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
*/
return adapters.toArray(new ObjectAdapter[adapters.size()]);
}
-
- // /////////////////////////////////////////////////////////////
- // Defaults
- // /////////////////////////////////////////////////////////////
+
+ //endregion
+
+ //region > Defaults
@Override
public ObjectAdapter getDefault(final ObjectAdapter adapter) {
@@ -437,10 +430,9 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
}
}
-
- // /////////////////////////////////////////////////////////////
- // Validation
- // /////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > Validation
@Override
public ActionArgumentContext createProposedArgumentInteractionContext(
@@ -499,9 +491,9 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
return arguments;
}
- // /////////////////////////////////////////////////////////////
- // Dependencies (from parent)
- // /////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > Dependencies (from parent)
protected SpecificationLoader getSpecificationLoader() {
return parentAction.getSpecificationLoader();
@@ -515,4 +507,6 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
return parentAction.getPersistenceSessionService();
}
+ //endregion
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/9f251d9c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
index 4930fa1..877a994 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterContributee.java
@@ -18,7 +18,6 @@ package org.apache.isis.core.metamodel.specloader.specimpl;
import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
-
public interface ObjectActionParameterContributee extends ObjectActionParameter {
}
http://git-wip-us.apache.org/repos/asf/isis/blob/9f251d9c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
index 8787b5d..3884074 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectAssociationAbstract.java
@@ -31,7 +31,6 @@ import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectAssociation;
import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
-// TODO need to pull up the common methods. like getName(), from subclasses
public abstract class ObjectAssociationAbstract extends ObjectMemberAbstract implements ObjectAssociation {
private final ObjectSpecification specification;
http://git-wip-us.apache.org/repos/asf/isis/blob/9f251d9c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
index 30e3e4e..57eb6fb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectMemberAbstract.java
@@ -27,7 +27,6 @@ import org.apache.isis.applib.annotation.Where;
import org.apache.isis.applib.filter.Filter;
import org.apache.isis.core.commons.lang.StringExtensions;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.consent.InteractionResult;
@@ -56,12 +55,11 @@ import org.apache.isis.core.metamodel.specloader.collectiontyperegistry.Collecti
public abstract class ObjectMemberAbstract implements ObjectMember {
- private final PersistenceSessionService persistenceSessionService;
-
public static ObjectSpecification getSpecification(final SpecificationLoader specificationLookup, final Class<?> type) {
return type == null ? null : specificationLookup.loadSpecification(type);
}
+ //region > fields
private final CollectionTypeRegistry collectionTypeRegistry = new CollectionTypeRegistry();
protected final String defaultName;
@@ -70,6 +68,8 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
private final FeatureType featureType;
private final SpecificationLoader specificationLookup;
private final ServicesInjector servicesInjector;
+ private final PersistenceSessionService persistenceSessionService;
+ //endregion
protected ObjectMemberAbstract(
final FacetedMethod facetedMethod,
@@ -89,10 +89,7 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
this.persistenceSessionService = objectMemberDependencies.getPersistenceSessionService();
}
-
- // /////////////////////////////////////////////////////////////
- // Identifiers
- // /////////////////////////////////////////////////////////////
+ //region > Identifiers
@Override
public String getId() {
@@ -116,9 +113,9 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
return featureType;
}
- // /////////////////////////////////////////////////////////////
- // Facets
- // /////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > Facets
@Override
public boolean containsFacet(final Class<? extends Facet> facetType) {
@@ -165,10 +162,9 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
getFacetedMethod().removeFacet(facetType);
}
- // /////////////////////////////////////////////////////////////
- // Name, Description, Help (convenience for facets)
- // /////////////////////////////////////////////////////////////
+ //endregion
+ //region > Name, Description, Help (convenience for facets)
/**
* Return the default label for this member. This is based on the name of
* this member.
@@ -200,10 +196,9 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
return facet.value();
}
- // /////////////////////////////////////////////////////////////
- // Hidden (or visible)
- // /////////////////////////////////////////////////////////////
+ //endregion
+ //region > Hidden (or visible)
/**
* Create an {@link InteractionContext} to represent an attempt to view this
* member (that is, to check if it is visible or not).
@@ -251,11 +246,9 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
final VisibilityContext<?> ic = createVisibleInteractionContext(target, interactionInitiatedBy, where);
return InteractionUtils.isVisibleResult(this, ic);
}
+ //endregion
- // /////////////////////////////////////////////////////////////
- // Disabled (or enabled)
- // /////////////////////////////////////////////////////////////
-
+ //region > Disabled (or enabled)
/**
* Create an {@link InteractionContext} to represent an attempt to
* use this member (that is, to check if it is usable or not).
@@ -291,10 +284,9 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
return InteractionUtils.isUsableResult(this, ic);
}
- // //////////////////////////////////////////////////////////////////
- // isAssociation, isAction
- // //////////////////////////////////////////////////////////////////
+ //endregion
+ //region > isAssociation, isAction
@Override
public boolean isAction() {
return featureType.isAction();
@@ -314,21 +306,18 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
public boolean isOneToOneAssociation() {
return featureType.isProperty();
}
+ //endregion
-
- // //////////////////////////////////////////////////////////////////
- // toString
- // //////////////////////////////////////////////////////////////////
+ //region > toString
@Override
public String toString() {
return String.format("id=%s,name='%s'", getId(), getName());
}
- // //////////////////////////////////////////////////////////////////
- // Dependencies
- // //////////////////////////////////////////////////////////////////
+ //endregion
+ //region > Dependencies
public SpecificationLoader getSpecificationLoader() {
return specificationLookup;
@@ -345,4 +334,7 @@ public abstract class ObjectMemberAbstract implements ObjectMember {
public CollectionTypeRegistry getCollectionTypeRegistry() {
return collectionTypeRegistry;
}
+
+ //endregion
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/9f251d9c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
index 0762472..953d4bc 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationContributee.java
@@ -161,11 +161,8 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
return InteractionUtils.isUsableResult(this, ic).createConsent();
}
-
- // //////////////////////////////////////
- // FacetHolder
- // //////////////////////////////////////
-
+ //region > FacetHolder
+
@Override
public Class<? extends Facet>[] getFacetTypes() {
return facetHolder.getFacetTypes();
@@ -220,4 +217,6 @@ public class OneToManyAssociationContributee extends OneToManyAssociationImpl im
return getServiceAdapter().getSpecification();
}
+ //endregion
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/9f251d9c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
index 41291a1..fda40d2 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToManyAssociationImpl.java
@@ -29,11 +29,11 @@ import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.consent.InteractionResult;
import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.FacetedMethod;
-import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionAddToFacet;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionClearFacet;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionFacet;
import org.apache.isis.core.metamodel.facets.collections.modify.CollectionRemoveFromFacet;
+import org.apache.isis.core.metamodel.facets.propcoll.accessor.PropertyOrCollectionAccessorFacet;
import org.apache.isis.core.metamodel.interactions.CollectionAddToContext;
import org.apache.isis.core.metamodel.interactions.CollectionRemoveFromContext;
import org.apache.isis.core.metamodel.interactions.CollectionUsabilityContext;
@@ -42,7 +42,6 @@ import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.interactions.UsabilityContext;
import org.apache.isis.core.metamodel.interactions.ValidityContext;
import org.apache.isis.core.metamodel.interactions.VisibilityContext;
-import org.apache.isis.core.metamodel.spec.Instance;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
import org.apache.isis.core.metamodel.spec.feature.OneToManyAssociation;
@@ -69,9 +68,7 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
return getCollectionTypeRegistry().semanticsOf(underlyingClass);
}
- // /////////////////////////////////////////////////////////////
- // Hidden (or visible)
- // /////////////////////////////////////////////////////////////
+ //region > visible, usable
@Override
public VisibilityContext<?> createVisibleInteractionContext(
@@ -80,9 +77,6 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
return new CollectionVisibilityContext(ownerAdapter, getIdentifier(), interactionInitiatedBy, where);
}
- // /////////////////////////////////////////////////////////////
- // Disabled (or enabled)
- // /////////////////////////////////////////////////////////////
@Override
public UsabilityContext<?> createUsableInteractionContext(
@@ -91,10 +85,9 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
return new CollectionUsabilityContext(ownerAdapter, getIdentifier(), interactionInitiatedBy, where);
}
- // /////////////////////////////////////////////////////////////
- // Validate Add
- // /////////////////////////////////////////////////////////////
+ //endregion
+ //region > Validate Add
// Not API
private ValidityContext<?> createValidateAddInteractionContext(
final InteractionInitiatedBy interactionInitiatedBy,
@@ -121,10 +114,9 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
return InteractionUtils.isValidResult(this, validityContext);
}
- // /////////////////////////////////////////////////////////////
- // Validate Remove
- // /////////////////////////////////////////////////////////////
+ //endregion
+ //region > Validate Remove
private ValidityContext<?> createValidateRemoveInteractionContext(
final ObjectAdapter ownerAdapter,
final ObjectAdapter proposedToRemoveAdapter,
@@ -156,9 +148,9 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
return !isNotPersisted();
}
- // /////////////////////////////////////////////////////////////
- // get, isEmpty, add, clear
- // /////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > get, isEmpty, add, clear
@Override
public ObjectAdapter get(
@@ -183,9 +175,9 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
return facet.size(collection) == 0;
}
- // /////////////////////////////////////////////////////////////
- // add, clear
- // /////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > add, clear
@Override
public void addElement(
@@ -231,10 +223,9 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
}
}
- // /////////////////////////////////////////////////////////////
- // defaults
- // /////////////////////////////////////////////////////////////
+ //endregion
+ //region > defaults
@Override
public ObjectAdapter getDefault(final ObjectAdapter ownerAdapter) {
return null;
@@ -244,9 +235,9 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
public void toDefault(final ObjectAdapter ownerAdapter) {
}
- // /////////////////////////////////////////////////////////////
- // choices & autoComplete
- // /////////////////////////////////////////////////////////////
+ //endregion
+
+ //region > choices & autoComplete
@Override
public ObjectAdapter[] getChoices(
@@ -279,10 +270,9 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
return 0; // n/a
}
- // /////////////////////////////////////////////////////////////
- // debug, toString
- // /////////////////////////////////////////////////////////////
+ //endregion
+ //region > debug, toString
@Override
public String debugData() {
final DebugString debugString = new DebugString();
@@ -302,5 +292,7 @@ public class OneToManyAssociationImpl extends ObjectAssociationAbstract implemen
return str.toString();
}
+ //endregion
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/9f251d9c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
index c9df053..f387d1f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterContributee.java
@@ -26,25 +26,17 @@ import org.apache.isis.core.metamodel.spec.feature.ObjectActionParameter;
public class OneToOneActionParameterContributee extends OneToOneActionParameterImpl implements ObjectActionParameterContributee{
private final ObjectAdapter serviceAdapter;
- private final ObjectActionImpl serviceAction;
private final ObjectActionParameter serviceActionParameter;
- private final int serviceParamNumber;
- private final int contributeeParamNumber;
private final ObjectActionContributee contributeeAction;
public OneToOneActionParameterContributee(
final ObjectAdapter serviceAdapter,
- final ObjectActionImpl serviceAction,
final ObjectActionParameterAbstract serviceActionParameter,
- final int serviceParamNumber,
final int contributeeParamNumber,
final ObjectActionContributee contributeeAction) {
super(contributeeParamNumber, contributeeAction, serviceActionParameter.getPeer());
this.serviceAdapter = serviceAdapter;
- this.serviceAction = serviceAction;
this.serviceActionParameter = serviceActionParameter;
- this.serviceParamNumber = serviceParamNumber;
- this.contributeeParamNumber = contributeeParamNumber;
this.contributeeAction = contributeeAction;
}
http://git-wip-us.apache.org/repos/asf/isis/blob/9f251d9c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
index 6901257..42997b9 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationContributee.java
@@ -145,11 +145,7 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
return InteractionUtils.isUsableResult(this, ic).createConsent();
}
-
- // //////////////////////////////////////
- // FacetHolder
- // //////////////////////////////////////
-
+ //region > FacetHolder
@Override
public Class<? extends Facet>[] getFacetTypes() {
return facetHolder.getFacetTypes();
@@ -195,6 +191,8 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
facetHolder.removeFacet(facetType);
}
+ //endregion
+
private ObjectAdapter getServiceAdapter() {
return getPersistenceSessionService().adapterFor(servicePojo);
}
@@ -204,4 +202,5 @@ public class OneToOneAssociationContributee extends OneToOneAssociationImpl impl
return getServiceAdapter().getSpecification();
}
+
}
http://git-wip-us.apache.org/repos/asf/isis/blob/9f251d9c/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
index 94d70e1..07874fa 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneAssociationImpl.java
@@ -50,7 +50,6 @@ import org.apache.isis.core.metamodel.interactions.PropertyVisibilityContext;
import org.apache.isis.core.metamodel.interactions.UsabilityContext;
import org.apache.isis.core.metamodel.interactions.ValidityContext;
import org.apache.isis.core.metamodel.interactions.VisibilityContext;
-import org.apache.isis.core.metamodel.spec.Instance;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.MutableCurrentHolder;
import org.apache.isis.core.metamodel.spec.feature.ObjectMemberDependencies;
@@ -58,12 +57,17 @@ import org.apache.isis.core.metamodel.spec.feature.OneToOneAssociation;
public class OneToOneAssociationImpl extends ObjectAssociationAbstract implements OneToOneAssociation {
- public OneToOneAssociationImpl(final FacetedMethod facetedMethod, final ObjectMemberDependencies objectMemberDependencies) {
+ public OneToOneAssociationImpl(
+ final FacetedMethod facetedMethod,
+ final ObjectMemberDependencies objectMemberDependencies) {
this(facetedMethod, getSpecification(objectMemberDependencies.getSpecificationLoader(), facetedMethod.getType()),
objectMemberDependencies);
}
- protected OneToOneAssociationImpl(final FacetedMethod facetedMethod, final ObjectSpecification objectSpec, final ObjectMemberDependencies objectMemberDependencies) {
+ protected OneToOneAssociationImpl(
+ final FacetedMethod facetedMethod,
+ final ObjectSpecification objectSpec,
+ final ObjectMemberDependencies objectMemberDependencies) {
super(facetedMethod, FeatureType.PROPERTY, objectSpec, objectMemberDependencies);
}
[05/12] isis git commit: ISIS-1194: move common behaviour between
ObjectActionParameterParseable and OnetoOneActionParameterImpl to
ObjectActionParameterAbstract. Also...
Posted by da...@apache.org.
ISIS-1194: move common behaviour between ObjectActionParameterParseable and OnetoOneActionParameterImpl to ObjectActionParameterAbstract. Also...
... delete ObjectActionParameterAbstract#set since doesn't seem to be called anywhere.
... (possibly through a long-standing bug), the doCoerceProposedValue of ObjectActionParameterParseable is never called... so delete it.
Project: http://git-wip-us.apache.org/repos/asf/isis/repo
Commit: http://git-wip-us.apache.org/repos/asf/isis/commit/9f83958a
Tree: http://git-wip-us.apache.org/repos/asf/isis/tree/9f83958a
Diff: http://git-wip-us.apache.org/repos/asf/isis/diff/9f83958a
Branch: refs/heads/ISIS-1213
Commit: 9f83958ade4a821fe75b744c769b10edd71067ea
Parents: 49dc51b
Author: Dan Haywood <da...@haywood-associates.co.uk>
Authored: Tue Oct 13 00:16:32 2015 +0100
Committer: Dan Haywood <da...@haywood-associates.co.uk>
Committed: Tue Oct 13 00:16:32 2015 +0100
----------------------------------------------------------------------
.../specimpl/ObjectActionParameterAbstract.java | 53 +++++++++------
.../ObjectActionParameterParseable.java | 69 --------------------
.../specimpl/ObjectSpecificationAbstract.java | 3 +-
.../specimpl/OneToOneActionParameterImpl.java | 55 ++++------------
4 files changed, 49 insertions(+), 131 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/isis/blob/9f83958a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
index 9f664fc..9a43566 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterAbstract.java
@@ -31,6 +31,7 @@ import org.apache.isis.applib.query.QueryFindAllInstances;
import org.apache.isis.core.commons.lang.ClassExtensions;
import org.apache.isis.core.commons.lang.ListExtensions;
import org.apache.isis.core.commons.lang.StringExtensions;
+import org.apache.isis.core.metamodel.adapter.MutableProposedHolder;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.adapter.mgr.AdapterManager;
import org.apache.isis.core.metamodel.consent.Allow;
@@ -38,6 +39,7 @@ import org.apache.isis.core.metamodel.consent.Consent;
import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.isis.core.metamodel.consent.InteractionResultSet;
import org.apache.isis.core.metamodel.facetapi.Facet;
+import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facetapi.MultiTypedFacet;
import org.apache.isis.core.metamodel.facets.TypedHolder;
import org.apache.isis.core.metamodel.facets.all.describedas.DescribedAsFacet;
@@ -53,6 +55,7 @@ import org.apache.isis.core.metamodel.interactions.InteractionUtils;
import org.apache.isis.core.metamodel.interactions.ValidityContext;
import org.apache.isis.core.metamodel.runtimecontext.PersistenceSessionService;
import org.apache.isis.core.metamodel.spec.DomainModelException;
+import org.apache.isis.core.metamodel.spec.Instance;
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;
@@ -64,12 +67,43 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
private final ObjectActionImpl parentAction;
private final TypedHolder peer;
+
+
protected ObjectActionParameterAbstract(final int number, final ObjectActionImpl objectAction, final TypedHolder peer) {
this.number = number;
this.parentAction = objectAction;
this.peer = peer;
}
+ @Override
+ public FeatureType getFeatureType() {
+ return FeatureType.ACTION_PARAMETER;
+ }
+
+
+ /**
+ * Gets the proposed value of the {@link Instance} (downcast as a
+ * {@link MutableProposedHolder}, wrapping the proposed value into a
+ * {@link ObjectAdapter}.
+ */
+ @Override
+ public ObjectAdapter get(final ObjectAdapter owner, final InteractionInitiatedBy interactionInitiatedBy) {
+ final MutableProposedHolder proposedHolder = getProposedHolder(owner);
+ final Object proposed = proposedHolder.getProposed();
+ return getAdapterMap().adapterFor(proposed);
+ }
+
+
+ protected MutableProposedHolder getProposedHolder(final ObjectAdapter owner) {
+ if (!(owner instanceof MutableProposedHolder)) {
+ throw new IllegalArgumentException("Instance should implement MutableProposedHolder");
+ }
+ return (MutableProposedHolder) owner;
+ }
+
+
+
+
/**
* Subclasses should override either {@link #isObject()} or
* {@link #isCollection()}.
@@ -449,14 +483,6 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
ObjectSpecification proposedValueSpec;
if(proposedValue != null) {
proposedValueAdapter = getAdapterMap().adapterFor(proposedValue);
- proposedValueSpec = proposedValueAdapter.getSpecification();
- if(!proposedValueSpec.isOfType(proposedValueSpec)) {
- proposedValueAdapter = doCoerceProposedValue(adapter, proposedValue, interactionInitiatedBy,
- localization
- );
- }
-
- // check has been coerced into correct type; otherwise give up
if(proposedValueAdapter == null) {
return null;
}
@@ -481,17 +507,6 @@ public abstract class ObjectActionParameterAbstract implements ObjectActionParam
}
/**
- * Optional hook for parsing.
- */
- protected ObjectAdapter doCoerceProposedValue(
- final ObjectAdapter adapter,
- final Object proposedValue,
- final InteractionInitiatedBy interactionInitiatedBy,
- final Localization localization) {
- return null;
- }
-
- /**
* TODO: this is not ideal, because we can only populate the array for
* single argument, rather than the entire argument set. Instead, we ought
* to do this in two passes, one to build up the argument set as a single
http://git-wip-us.apache.org/repos/asf/isis/blob/9f83958a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
index 4aa2c5e..8d44071 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionParameterParseable.java
@@ -19,15 +19,7 @@
package org.apache.isis.core.metamodel.specloader.specimpl;
-import org.apache.isis.applib.profiles.Localization;
-import org.apache.isis.core.metamodel.adapter.MutableProposedHolder;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.TypedHolder;
-import org.apache.isis.core.metamodel.facets.object.parseable.ParseableFacet;
-import org.apache.isis.core.metamodel.spec.Instance;
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
public class ObjectActionParameterParseable extends ObjectActionParameterAbstract implements OneToOneActionParameter {
@@ -36,67 +28,6 @@ public class ObjectActionParameterParseable extends ObjectActionParameterAbstrac
super(index, action, peer);
}
- protected ObjectAdapter doCoerceProposedValue(
- final ObjectAdapter adapter,
- final Object proposedValue,
- final InteractionInitiatedBy interactionInitiatedBy,
- final Localization localization) {
- // try to parse
- if (!(proposedValue instanceof String)) {
- return null;
- }
- final String proposedString = (String) proposedValue;
- final ObjectSpecification parameterSpecification = getSpecification();
- final ParseableFacet p = parameterSpecification.getFacet(ParseableFacet.class);
- try {
- final ObjectAdapter parsedAdapter = p.parseTextEntry(null, proposedString, interactionInitiatedBy,
- localization
- );
- return parsedAdapter;
- } catch(Exception ex) {
- return null;
- }
- }
-
-
- // //////////////////////////////////////////////////////////////////////
- // get, set
- // //////////////////////////////////////////////////////////////////////
-
- /**
- * Gets the proposed value of the {@link Instance} (downcast as a
- * {@link MutableProposedHolder}, wrapping the proposed value into a
- * {@link ObjectAdapter}.
- */
- @Override
- public ObjectAdapter get(final ObjectAdapter owner, final InteractionInitiatedBy interactionInitiatedBy) {
- final MutableProposedHolder proposedHolder = getProposedHolder(owner);
- final Object proposed = proposedHolder.getProposed();
- return getAdapterMap().adapterFor(proposed);
- }
-
- /**
- * Sets the proposed value of the {@link Instance} (downcast as a
- * {@link MutableProposedHolder}, unwrapped the proposed value from a
- * {@link ObjectAdapter}.
- */
- public void set(final ObjectAdapter owner, final ObjectAdapter newValue) {
- final MutableProposedHolder proposedHolder = getProposedHolder(owner);
- final Object newValuePojo = newValue.getObject();
- proposedHolder.setProposed(newValuePojo);
- }
-
- private MutableProposedHolder getProposedHolder(final ObjectAdapter owner) {
- if (!(owner instanceof MutableProposedHolder)) {
- throw new IllegalArgumentException("Instance should implement MutableProposedHolder");
- }
- return (MutableProposedHolder) owner;
- }
-
- @Override
- public FeatureType getFeatureType() {
- return FeatureType.ACTION_PARAMETER;
- }
}
http://git-wip-us.apache.org/repos/asf/isis/blob/9f83958a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
index 548bf43..7d60490 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
@@ -82,7 +82,6 @@ import org.apache.isis.core.metamodel.interactions.ObjectValidityContext;
import org.apache.isis.core.metamodel.layout.DeweyOrderSet;
import org.apache.isis.core.metamodel.runtimecontext.ServicesInjector;
import org.apache.isis.core.metamodel.spec.ActionType;
-import org.apache.isis.core.metamodel.spec.Instance;
import org.apache.isis.core.metamodel.spec.ObjectSpecId;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
import org.apache.isis.core.metamodel.spec.ObjectSpecificationDependencies;
@@ -459,7 +458,7 @@ public abstract class ObjectSpecificationAbstract extends FacetHolderImpl implem
}
}
final ObjectSpecification superclassSpec = superclass();
- return superclassSpec != null ? superclassSpec.isOfType(specification) : false;
+ return superclassSpec != null && superclassSpec.isOfType(specification);
}
//endregion
http://git-wip-us.apache.org/repos/asf/isis/blob/9f83958a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
----------------------------------------------------------------------
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
index ece1864..77b3598 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/OneToOneActionParameterImpl.java
@@ -19,12 +19,7 @@
package org.apache.isis.core.metamodel.specloader.specimpl;
-import org.apache.isis.core.metamodel.adapter.MutableProposedHolder;
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.consent.InteractionInitiatedBy;
-import org.apache.isis.core.metamodel.facetapi.FeatureType;
import org.apache.isis.core.metamodel.facets.TypedHolder;
-import org.apache.isis.core.metamodel.spec.Instance;
import org.apache.isis.core.metamodel.spec.feature.OneToOneActionParameter;
public class OneToOneActionParameterImpl extends ObjectActionParameterAbstract implements OneToOneActionParameter {
@@ -33,10 +28,6 @@ public class OneToOneActionParameterImpl extends ObjectActionParameterAbstract i
super(index, actionImpl, peer);
}
- @Override
- public FeatureType getFeatureType() {
- return FeatureType.ACTION_PARAMETER;
- }
@Override
public boolean isObject() {
@@ -44,39 +35,21 @@ public class OneToOneActionParameterImpl extends ObjectActionParameterAbstract i
}
- // //////////////////////////////////////////////////////////////////////
- // get, set
- // //////////////////////////////////////////////////////////////////////
-
- /**
- * Gets the proposed value of the {@link Instance} (downcast as a
- * {@link MutableProposedHolder}, wrapping the proposed value into a
- * {@link ObjectAdapter}.
- */
- @Override
- public ObjectAdapter get(final ObjectAdapter owner, final InteractionInitiatedBy interactionInitiatedBy) {
- final MutableProposedHolder proposedHolder = getProposedHolder(owner);
- final Object proposed = proposedHolder.getProposed();
- return getAdapterMap().adapterFor(proposed);
- }
-
- /**
- * Sets the proposed value of the {@link Instance} (downcast as a
- * {@link MutableProposedHolder}, unwrapped the proposed value from a
- * {@link ObjectAdapter}.
- */
- public void set(final ObjectAdapter owner, final ObjectAdapter newValue) {
- final MutableProposedHolder proposedHolder = getProposedHolder(owner);
- final Object newValuePojo = newValue.getObject();
- proposedHolder.setProposed(newValuePojo);
- }
+// // //////////////////////////////////////////////////////////////////////
+// // get, set
+// // //////////////////////////////////////////////////////////////////////
+//
+// /**
+// * Sets the proposed value of the {@link Instance} (downcast as a
+// * {@link MutableProposedHolder}, unwrapped the proposed value from a
+// * {@link ObjectAdapter}.
+// */
+// public void set(final ObjectAdapter owner, final ObjectAdapter newValue) {
+// final MutableProposedHolder proposedHolder = getProposedHolder(owner);
+// final Object newValuePojo = newValue.getObject();
+// proposedHolder.setProposed(newValuePojo);
+// }
- private MutableProposedHolder getProposedHolder(final ObjectAdapter owner) {
- if (!(owner instanceof MutableProposedHolder)) {
- throw new IllegalArgumentException("Instance should implement MutableProposedHolder");
- }
- return (MutableProposedHolder) owner;
- }
}