/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.isis.viewer.wicket.viewer.registries.components; import com.google.inject.Singleton; import org.apache.isis.viewer.wicket.ui.ComponentFactory; import org.apache.isis.viewer.wicket.ui.app.registry.ComponentFactoryRegistrar; import org.apache.isis.viewer.wicket.ui.components.about.AboutPanelFactory; import org.apache.isis.viewer.wicket.ui.components.actionlink.ActionLinkPanelFactory; import org.apache.isis.viewer.wicket.ui.components.actionmenu.serviceactions.ServiceActionsPanelFactory; import org.apache.isis.viewer.wicket.ui.components.actionmenu.serviceactions.TertiaryMenuPanelFactory; import org.apache.isis.viewer.wicket.ui.components.actioninfo.ActionInfoPanelFactory; import org.apache.isis.viewer.wicket.ui.components.actions.ActionParametersPanelFactory; import org.apache.isis.viewer.wicket.ui.components.actions.ActionParametersFormPanelFactory; import org.apache.isis.viewer.wicket.ui.components.bookmarkedpages.BookmarkedPagesPanelFactory; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.ajaxtable.CollectionContentsAsAjaxTablePanelFactory; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.multiple.CollectionContentsMultipleViewsPanelFactory; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.summary.CollectionContentsAsSummaryFactory; import org.apache.isis.viewer.wicket.ui.components.collectioncontents.unresolved.CollectionContentsHiddenPanelFactory; import org.apache.isis.viewer.wicket.ui.components.empty.EmptyCollectionPanelFactory; import org.apache.isis.viewer.wicket.ui.components.entity.collection.EntityCollectionPanelFactory; import org.apache.isis.viewer.wicket.ui.components.entity.header.EntityHeaderPanelFactory; import org.apache.isis.viewer.wicket.ui.components.entity.icontitle.EntityIconAndTitlePanelFactory; import org.apache.isis.viewer.wicket.ui.components.entity.icontitle.EntityIconTitleAndCopyLinkPanelFactory; import org.apache.isis.viewer.wicket.ui.components.entity.selector.links.EntityLinksSelectorPanelFactory; import org.apache.isis.viewer.wicket.ui.components.footer.FooterPanelFactory; import org.apache.isis.viewer.wicket.ui.components.header.HeaderPanelFactory; import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditFormPanelFactory; import org.apache.isis.viewer.wicket.ui.components.property.PropertyEditPanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.isisapplib.*; import org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates.JavaSqlDatePanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates.JavaSqlTimePanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates.JavaSqlTimestampPanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.jdkdates.JavaUtilDatePanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath.JavaMathBigDecimalPanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.jdkmath.JavaMathBigIntegerPanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.jodatime.JodaDateTimePanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.jodatime.JodaLocalDatePanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.jodatime.JodaLocalDateTimePanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.primitive.*; import org.apache.isis.viewer.wicket.ui.components.scalars.reference.ReferencePanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.string.StringPanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.value.ValuePanelFactory; import org.apache.isis.viewer.wicket.ui.components.standalonecollection.StandaloneCollectionPanelFactory; import org.apache.isis.viewer.wicket.ui.components.unknown.UnknownModelPanelFactory; import org.apache.isis.viewer.wicket.ui.components.value.StandaloneValuePanelFactory; import org.apache.isis.viewer.wicket.ui.components.voidreturn.VoidReturnPanelFactory; import org.apache.isis.viewer.wicket.ui.components.welcome.WelcomePanelFactory; import org.apache.isis.viewer.wicket.ui.components.widgets.entitysimplelink.EntityLinkSimplePanelFactory; import org.apache.isis.viewer.wicket.ui.components.scalars.valuechoices.ValueChoicesSelect2PanelFactory; import java.util.ServiceLoader; /** * Default implementation of {@link ComponentFactoryRegistrar} that registers a * hardcoded set of built-in {@link ComponentFactory}s, along with any * implementations loaded using {@link ServiceLoader} (ie from * <tt>META-INF/services</tt>). */ @Singleton public class ComponentFactoryRegistrarDefault implements ComponentFactoryRegistrar { @Override public void addComponentFactories(final ComponentFactoryList componentFactories) { addComponentFactoriesActingAsSelectors(componentFactories); addComponentFactoriesUsingServiceLoader(componentFactories); addBuiltInComponentFactories(componentFactories); } /** * Any {@link ComponentFactory}s that act as selectors of other factories * should be registered here; they will be loaded first, to ensure that they * are found first. */ protected void addComponentFactoriesActingAsSelectors(final ComponentFactoryList componentFactories) { addLinksSelectorFactories(componentFactories); componentFactories.add(new CollectionContentsHiddenPanelFactory()); // to prevent eager loading } protected void addLinksSelectorFactories(final ComponentFactoryList componentFactories) { componentFactories.add(new EntityLinksSelectorPanelFactory()); componentFactories.add(new CollectionContentsMultipleViewsPanelFactory()); } protected void addComponentFactoriesUsingServiceLoader(final ComponentFactoryList componentFactories) { final ServiceLoader<ComponentFactory> serviceLoader = ServiceLoader.load(ComponentFactory.class); for (final ComponentFactory componentFactory : serviceLoader) { componentFactories.add(componentFactory); } } private void addBuiltInComponentFactories(final ComponentFactoryList componentFactories) { addComponentFactoriesForWelcomeAndAbout(componentFactories); addComponentFactoriesForApplicationActions(componentFactories); addComponentFactoriesForEntity(componentFactories); addComponentFactoriesForActionInfo(componentFactories); addComponentFactoriesForAction(componentFactories); addComponentFactoriesForActionLink(componentFactories); addComponentFactoriesForPropertyEdit(componentFactories); addComponentFactoriesForEntityCollectionContents(componentFactories); addComponentFactoriesForEmptyCollection(componentFactories); addComponentFactoriesForScalar(componentFactories); addComponentFactoriesForEntityLink(componentFactories); addComponentFactoriesForVoidReturn(componentFactories); addComponentFactoriesForValue(componentFactories); addComponentFactoriesForParameters(componentFactories); addComponentFactoriesForBreadcrumbs(componentFactories); addComponentFactoriesForPageHeader(componentFactories); addComponentFactoriesForPageFooter(componentFactories); addComponentFactoriesForUnknown(componentFactories); } protected void addComponentFactoriesForPageHeader(ComponentFactoryList componentFactories) { componentFactories.add(new HeaderPanelFactory()); } protected void addComponentFactoriesForPageFooter(ComponentFactoryList componentFactories) { componentFactories.add(new FooterPanelFactory()); } protected void addComponentFactoriesForWelcomeAndAbout(final ComponentFactoryList componentFactories) { componentFactories.add(new WelcomePanelFactory()); componentFactories.add(new AboutPanelFactory()); } protected void addComponentFactoriesForEntity(final ComponentFactoryList componentFactories) { // lower-level componentFactories.add(new EntityIconAndTitlePanelFactory()); componentFactories.add(new EntityIconTitleAndCopyLinkPanelFactory()); componentFactories.add(new EntityHeaderPanelFactory()); componentFactories.add(new EntityCollectionPanelFactory()); } protected void addComponentFactoriesForEntityCollectionContents(final ComponentFactoryList componentFactories) { componentFactories.add(new CollectionContentsAsAjaxTablePanelFactory()); // // work-in-progress // componentFactories.add(new CollectionContentsAsIconsPanelFactory()); componentFactories.add(new CollectionContentsAsSummaryFactory()); } protected void addComponentFactoriesForEmptyCollection(final ComponentFactoryList componentFactories) { componentFactories.add(new EmptyCollectionPanelFactory()); } protected void addComponentFactoriesForValue(final ComponentFactoryList componentFactories) { componentFactories.add(new StandaloneValuePanelFactory()); } protected void addComponentFactoriesForScalar(final ComponentFactoryList componentFactories) { componentFactories.add(new ReferencePanelFactory()); componentFactories.add(new BooleanPanelFactory()); componentFactories.add(new BytePanelFactory()); componentFactories.add(new ShortPanelFactory()); componentFactories.add(new IntegerPanelFactory()); componentFactories.add(new LongPanelFactory()); componentFactories.add(new CharacterPanelFactory()); componentFactories.add(new FloatPanelFactory()); componentFactories.add(new DoublePanelFactory()); componentFactories.add(new StringPanelFactory()); // work-in-progress // componentFactories.add(new JavaAwtImagePanelFactory()); componentFactories.add(new JavaUtilDatePanelFactory()); componentFactories.add(new JavaSqlTimestampPanelFactory()); componentFactories.add(new JavaSqlDatePanelFactory()); componentFactories.add(new JavaSqlTimePanelFactory()); componentFactories.add(new IsisMoneyPanelFactory()); componentFactories.add(new IsisDatePanelFactory()); componentFactories.add(new IsisDateTimePanelFactory()); componentFactories.add(new IsisTimePanelFactory()); componentFactories.add(new IsisTimeStampPanelFactory()); componentFactories.add(new IsisColorPanelFactory()); componentFactories.add(new IsisPercentagePanelFactory()); componentFactories.add(new IsisPasswordPanelFactory()); componentFactories.add(new IsisBlobPanelFactory()); componentFactories.add(new IsisClobPanelFactory()); componentFactories.add(new JavaMathBigIntegerPanelFactory()); componentFactories.add(new JavaMathBigDecimalPanelFactory()); componentFactories.add(new JodaLocalDatePanelFactory()); componentFactories.add(new JodaLocalDateTimePanelFactory()); componentFactories.add(new JodaDateTimePanelFactory()); componentFactories.add(new ValuePanelFactory()); // or for choices componentFactories.add(new ValueChoicesSelect2PanelFactory()); } protected void addComponentFactoriesForEntityLink(final ComponentFactoryList componentFactories) { componentFactories.add(new EntityLinkSimplePanelFactory()); } protected void addComponentFactoriesForVoidReturn(final ComponentFactoryList componentFactories) { componentFactories.add(new VoidReturnPanelFactory()); } protected void addComponentFactoriesForActionInfo(final ComponentFactoryList componentFactories) { componentFactories.add(new ActionInfoPanelFactory()); } protected void addComponentFactoriesForParameters(final ComponentFactoryList componentFactories) { componentFactories.add(new ActionParametersFormPanelFactory()); } protected void addComponentFactoriesForAction(final ComponentFactoryList componentFactories) { componentFactories.add(new ActionParametersPanelFactory()); componentFactories.add(new StandaloneCollectionPanelFactory()); } protected void addComponentFactoriesForPropertyEdit(final ComponentFactoryList componentFactories) { componentFactories.add(new PropertyEditPanelFactory()); componentFactories.add(new PropertyEditFormPanelFactory()); } protected void addComponentFactoriesForActionLink(final ComponentFactoryList componentFactories) { componentFactories.add(new ActionLinkPanelFactory()); } protected void addComponentFactoriesForApplicationActions(final ComponentFactoryList componentFactories) { componentFactories.add(new ServiceActionsPanelFactory()); componentFactories.add(new TertiaryMenuPanelFactory()); } protected void addComponentFactoriesForBreadcrumbs(ComponentFactoryList componentFactories) { componentFactories.add(new BookmarkedPagesPanelFactory()); } protected void addComponentFactoriesForUnknown(final ComponentFactoryList componentFactories) { componentFactories.add(new UnknownModelPanelFactory()); } }