@Override public <T extends Facet> T getFacet(final Class<T> cls) { return peer != null ? peer.getFacet(cls) : null; }
@Override public void addFacet(final MultiTypedFacet facet) { if (peer != null) { peer.addFacet(facet); } }
@Override public boolean containsDoOpFacet(final Class<? extends Facet> facetType) { return peer == null ? false : peer.containsDoOpFacet(facetType); }
@Override public ObjectSpecification getSpecification() { return ObjectMemberAbstract.getSpecification(getSpecificationLookup(), peer.getType()); }
@Override public void removeFacet(final Class<? extends Facet> facetType) { if (peer != null) { peer.removeFacet(facetType); } }
@Override public boolean containsFacet(final Class<? extends Facet> facetType) { return peer != null ? peer.containsFacet(facetType) : false; }
@SuppressWarnings("unchecked") @Override public Class<? extends Facet>[] getFacetTypes() { return peer != null ? peer.getFacetTypes() : new Class[] {}; }
@Override public List<Facet> getFacets(final Filter<Facet> filter) { return peer != null ? peer.getFacets(filter) : Lists.<Facet> newArrayList(); }
@Override public void processParams(final ProcessParameterContext processParameterContext) { final List<Facet> facets = new ArrayList<Facet>(); if (processParameterContext.getFacetHolder() instanceof TypedHolder) { final TypedHolder typedHolder = processParameterContext.getFacetHolder(); if (typedHolder.getFeatureType().isActionParameter()) { facets.add(new NamedFacetNone(processParameterContext.getFacetHolder())); facets.add(new DescribedAsFacetNone(processParameterContext.getFacetHolder())); facets.add(new HelpFacetNone(processParameterContext.getFacetHolder())); facets.add(new MultiLineFacetNone(false, processParameterContext.getFacetHolder())); facets.add(new MaxLengthFacetUnlimited(processParameterContext.getFacetHolder())); } } FacetUtil.addFacets(facets); }
@Override public Object[] getChoices(final ObjectAdapter adapter) { final FacetHolder facetHolder = getFacetHolder(); final TypedHolder paramPeer = (TypedHolder) facetHolder; final ObjectSpecification noSpec = getSpecification(paramPeer.getType()); final ChoicesFacet choicesFacet = noSpec.getFacet(ChoicesFacet.class); if (choicesFacet == null) { return new Object[0]; } return choicesFacet.getChoices(adapter); }
@Override public void removeFacet(final Facet facet) { if (peer != null) { peer.removeFacet(facet); } }
@Test public void getName_whenNamedFaceNotPresentAndMultipleParamsOfSameType() throws Exception { objectActionParameter = new ObjectActionParameterAbstractToTest(2, parentAction, actionParamPeer); objectActionParameter.setSpecification(stubSpecForString); context.checking(new Expectations() { { one(actionParamPeer).getFacet(NamedFacet.class); will(returnValue(null)); one(parentAction).getParameters((Filter<ObjectActionParameter>) with(anything())); will(returnValue(Lists.newArrayList(stubObjectActionParameterString, objectActionParameter, stubObjectActionParameterString2))); } }); assertThat(objectActionParameter.getName(), is("string 2")); }
/** * 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(getSpecificationLookup(), paramPeer.getType()); if (specification.isParseable()) { parameters.add(new ObjectActionParameterParseable(i, this, paramPeer)); } else if (specification.isNotCollection()) { parameters.add(new OneToOneActionParameterImpl(i, this, paramPeer)); } else if (specification.isCollection()) { throw new UnknownTypeException("collections not supported as parameters: " + getIdentifier()); } else { throw new UnknownTypeException(specification); } } this.parameters = parameters; } return parameters; }
@Override public void addFacet(final Facet facet) { if (peer != null) { peer.addFacet(facet); } }
@Test public void getId_whenNamedFaceNotPresentAndMultipleParamsOfSameType() throws Exception { objectActionParameter = new ObjectActionParameterAbstractToTest(2, parentAction, actionParamPeer); objectActionParameter.setSpecification(stubSpecForString); context.checking(new Expectations() { { one(actionParamPeer).getFacet(NamedFacet.class); will(returnValue(null)); one(parentAction).getParameters((Filter<ObjectActionParameter>) with(anything())); will(returnValue(Lists.newArrayList(stubObjectActionParameterString, objectActionParameter, stubObjectActionParameterString2))); } }); assertThat(objectActionParameter.getId(), is("string2")); }
@Test public void getId_whenNamedFaceNotPresentAndMultipleParamsOfSameType() throws Exception { objectActionParameter = new ObjectActionParameterAbstractToTest(2, parentAction, actionParamPeer); objectActionParameter.setSpecification(stubSpecForString); context.checking(new Expectations() { { one(actionParamPeer).getFacet(NamedFacet.class); will(returnValue(null)); one(parentAction).getParameters((Filter<ObjectActionParameter>) with(anything())); will(returnValue(Lists.newArrayList(stubObjectActionParameterString, objectActionParameter, stubObjectActionParameterString2))); } }); assertThat(objectActionParameter.getId(), is("string2")); }
@Test public void getName_whenNamedFaceNotPresentAndMultipleParamsOfSameType() throws Exception { objectActionParameter = new ObjectActionParameterAbstractToTest(2, parentAction, actionParamPeer); objectActionParameter.setSpecification(stubSpecForString); context.checking(new Expectations() { { one(actionParamPeer).getFacet(NamedFacet.class); will(returnValue(null)); one(parentAction).getParameters((Filter<ObjectActionParameter>) with(anything())); will(returnValue(Lists.newArrayList(stubObjectActionParameterString, objectActionParameter, stubObjectActionParameterString2))); } }); assertThat(objectActionParameter.getName(), is("string 2")); }
@SuppressWarnings("unchecked") @Test public void whenNamedFaceNotPresentAndOnlyOneParamOfType() throws Exception { objectActionParameter = new ObjectActionParameterAbstractToTest(0, parentAction, actionParamPeer); objectActionParameter.setSpecification(stubSpecForString); context.checking(new Expectations() { { one(actionParamPeer).getFacet(NamedFacet.class); will(returnValue(null)); one(parentAction).getParameters((Filter<ObjectActionParameter>) with(anything())); will(returnValue(Lists.newArrayList(objectActionParameter))); } }); assertThat(objectActionParameter.getName(), is("string")); }
@SuppressWarnings("unchecked") @Test public void whenNamedFaceNotPresentAndOnlyOneParamOfType() throws Exception { objectActionParameter = new ObjectActionParameterAbstractToTest(0, parentAction, actionParamPeer); objectActionParameter.setSpecification(stubSpecForString); context.checking(new Expectations() { { one(actionParamPeer).getFacet(NamedFacet.class); will(returnValue(null)); one(parentAction).getParameters((Filter<ObjectActionParameter>) with(anything())); will(returnValue(Lists.newArrayList(objectActionParameter))); } }); assertThat(objectActionParameter.getName(), is("string")); }
@Test public void getName_whenNamedFacetPresent() throws Exception { objectActionParameter = new ObjectActionParameterAbstractToTest(0, parentAction, actionParamPeer); context.checking(new Expectations() { { one(actionParamPeer).getFacet(NamedFacet.class); will(returnValue(namedFacet)); atLeast(1).of(namedFacet).value(); will(returnValue("Some parameter name")); } }); assertThat(objectActionParameter.getName(), is("Some parameter name")); }