/*
* 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.ui;
import org.apache.wicket.Component;
import org.apache.isis.core.commons.lang.StringExtensions;
/**
* Enumerates the different types of {@link Component}s that can be constructed
* using {@link ComponentFactory}.
*
* <p>
* Some are fine-grained (such as {@link ComponentType#SCALAR_NAME_AND_VALUE}, a
* panel to represent a single scalar property or parameter), but others are
* somewhat larger (such as {@link ComponentType#ENTITY}, representing an
* entity, with its actions, properties and collections).
*/
public enum ComponentType {
/**
* About page text.
*/
ABOUT,
/**
* Welcome page text.
*/
WELCOME,
/**
* List of services and their actions.
*
* <p>
* Could be rendered using a JavaScript or DHTML menu, an accordion, or a
* tree view.
*/
SERVICE_ACTIONS,
/**
* A single domain entity.
*/
ENTITY,
/**
* Icon and title for a single entity.
*/
ENTITY_ICON_AND_TITLE,
/**
* Icon, title and a copy link for a single entity.
*/
ENTITY_ICON_TITLE_AND_COPYLINK,
/**
* Title, icon and action list for a single entity.
*/
ENTITY_SUMMARY,
/**
* A single "parented" collection of an entity.
*
* <p>
* Note that the default implementation is actually a wrapper that provides a selector over all available
* individual representations of the entity by way of {@link #COLLECTION_CONTENTS} component type. The
* framework provides a number of implementations of this lower-level component: as a table, as
* collapsed/hidden, as a summary. Any additional representations that are found that can render the
* collection (eg map, calendar) are added to the selector.
* </p>
*/
ENTITY_COLLECTION,
/**
* A single standalone value, as might be returned from an action.
*/
VALUE,
/**
* The name and value of a single property or parameter, ie a scalar.
*/
SCALAR_NAME_AND_VALUE,
/**
* The parameter form (dialog box) of an action.
*/
PARAMETERS,
/**
* The edit form (property value and buttons) of an property.
*/
PROPERTY_EDIT_FORM,
/**
* Info details for an action, eg to display the target, a resubmit button,
* any description or help text, and so on.
*/
ACTION_INFO,
/**
* Used to display the parameters of an action.
*/
ACTION_PROMPT,
/**
* Used to display a single property for editing.
*/
PROPERTY_EDIT_PROMPT,
/**
* Top-level component for rendering a standalone collection (ie as returned by
* an action).
*/
STANDALONE_COLLECTION,
/**
* Bookmarked link to invoke an action
*/
ACTION_LINK,
/**
* A collection of entities (the value of)
*/
COLLECTION_CONTENTS,
/**
* A link to an entity.
*/
ENTITY_LINK,
/**
* A collection of entities, from an action, but none returned.
*/
EMPTY_COLLECTION,
/**
* A void result from an action.
*/
VOID_RETURN,
/**
* A list of models, rendered as a list of links.
*/
BOOKMARKED_PAGES,
/**
* Place holder for a component used to represent an unknown model;
* not used for matching, since the {@link ComponentFactory} implementation
* acts as a fallback whenever a more suitable factory cannot be located.
*/
UNKNOWN,
/**
* The header (navigation bar) of the page
*/
HEADER,
/**
* The footer of the page
*/
FOOTER;
/**
* Returns the {@link #name()} formatted as
* {@link org.apache.isis.core.commons.lang.StringExtensions#toCamelCase(String) case}.
*
* <p>
* For example, <tt>OBJECT_EDIT</tt> becomes <tt>objectEdit</tt>.
*/
@Override
public String toString() {
return getWicketId();
}
public String getWicketId() {
return StringExtensions.toCamelCase(name());
}
public static ComponentType lookup(final String id) {
for (final ComponentType componentType : values()) {
if (componentType.getWicketId().equals(id)) {
return componentType;
}
}
return null;
}
}