/*
* 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.standalonelist;
import java.util.List;
import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
import org.apache.isis.core.metamodel.facetapi.FacetUtil;
import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacetDefaultToObject;
import org.apache.isis.core.metamodel.services.ServicesInjector;
import org.apache.isis.core.metamodel.spec.ActionType;
import org.apache.isis.core.metamodel.spec.FreeStandingList;
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.ObjectAssociation;
import org.apache.isis.core.metamodel.specloader.facetprocessor.FacetProcessor;
import org.apache.isis.core.metamodel.specloader.specimpl.ObjectSpecificationAbstract;
/**
* A custom {@link ObjectSpecification} that is designed to treat the
* {@link FreeStandingList} class as a "standalone" collection.
*/
public class ObjectSpecificationOnStandaloneList extends ObjectSpecificationAbstract {
private static final String NAME = "Instances";
private static final String DESCRIBED_AS = "Typed instances";
private static final String ICON_NAME = "instances";
//region > constructor
public ObjectSpecificationOnStandaloneList(
final ServicesInjector servicesInjector,
final FacetProcessor facetProcessor) {
super(FreeStandingList.class, NAME, servicesInjector, facetProcessor);
}
//endregion
//region > Introspection
@Override
public void introspectTypeHierarchyAndMembers() {
updateSuperclass(Object.class);
addFacet(new CollectionFacetOnStandaloneList(this));
addFacet(new TypeOfFacetDefaultToObject(this, getSpecificationLoader()) {
});
// ObjectList specific
FacetUtil.addFacet(new NamedFacetOnStandaloneList(NAME, this));
FacetUtil.addFacet(new PluralFacetOnStandaloneList(NAME, this));
FacetUtil.addFacet(new DescribedAsFacetOnStandaloneList(DESCRIBED_AS, this));
// don't install anything for NotPersistableFacet
}
//endregion
//region > isXxx
@Override
public boolean isService() {
return false;
}
@Override
public boolean isViewModel() {
return false;
}
@Override
public boolean isMixin() {
return false;
}
@Override
public boolean isViewModelCloneable(ObjectAdapter targetAdapter) {
return false;
}
@Override
public boolean isWizard() {
return false;
}
//endregion
//region > Associations
/**
* Review: is this ever called for an instance of this class? If not, then
* no need to override.
*/
@Override
public ObjectAssociation getAssociation(final String id) {
return null;
}
//endregion
//region > Title and Icon
@Override
public String getTitle(final ObjectAdapter object) {
return ((FreeStandingList) object.getObject()).titleString();
}
@Override
public String getIconName(final ObjectAdapter object) {
return ICON_NAME;
}
//endregion
//region > Object Actions
/**
* Review: is it necessary to override for this subclass?
*/
@Override
public ObjectAction getObjectAction(final ActionType type, final String id, final List<ObjectSpecification> parameters) {
return null;
}
/**
* Review: is it necessary to override for this subclass?
*/
@Override
public ObjectAction getObjectAction(final ActionType type, final String id) {
return null;
}
/**
* Review: is it necessary to override for this subclass?
*/
@Override
public ObjectAction getObjectAction(final String nameParmsIdentityString) {
return null;
}
//endregion
}