
org.efaps.admin.ui.AbstractCommand Maven / Gradle / Ivy
/*
* Copyright 2003 - 2013 The eFaps Team
*
* Licensed 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.
*
* Revision: $Rev: 8895 $
* Last Changed: $Date: 2013-02-19 21:48:54 -0500 (Tue, 19 Feb 2013) $
* Last Changed By: $Author: [email protected] $
*/
package org.efaps.admin.ui;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import org.efaps.admin.EFapsSystemConfiguration;
import org.efaps.admin.datamodel.Attribute;
import org.efaps.admin.datamodel.Classification;
import org.efaps.admin.datamodel.Type;
import org.efaps.admin.dbproperty.DBProperties;
import org.efaps.admin.user.Role;
import org.efaps.ci.CIAdminUserInterface;
import org.efaps.util.EFapsException;
import org.efaps.util.RequestHandler;
import org.efaps.util.cache.CacheReloadException;
/**
* This class represents the Commands which enable the interaction with a User.
* Buttons in the UserInterface a represented by this Class.
*
* @author The eFaps Team
* @version $Id: AbstractCommand.java 8895 2013-02-20 02:48:54Z [email protected] $
*/
public abstract class AbstractCommand
extends AbstractUserInterfaceObject
{
/**
* This enum is used to define the Sortdirection of a Field.
*/
public static enum SortDirection {
/**
* Sortdirection descending.
*/
DESCENDING("desc"),
/**
* Sortdirection ascending.
*/
ASCENDING("asc"),
/**
* Sortdirection none.
*/
NONE("");
/**
* Variable storing the value.
*/
private final String value;
/**
* Private constructor setting the value for the enum.
*
* @param _value value
*/
private SortDirection(final String _value)
{
this.value = _value;
AbstractCommand.MAPPER.put(this.value, this);
}
/**
* Getter method for instance variable {@link #value}.
*
* @return value of instance variable {@link #value}
*/
public String getValue()
{
return this.value;
}
/**
* Method to get a SortDirection by its value.
*
* @param _value Value for sort direction
* @return SortDirection
*/
public static SortDirection getEnum(final String _value)
{
return AbstractCommand.MAPPER.get(_value);
}
}
/**
* This map is used as a store by the enum SortDirection for the method
* getEnum.
*/
private static final Map MAPPER
= new HashMap();
/**
* This enum id used to define the different Targets a Command can have.
*/
public static enum Target {
/** The target of the href is the content frame. */
CONTENT,
/** The target of the href is the hidden frame. */
HIDDEN,
/** The target of the href is a Modal Window. */
MODAL,
/** The target of the href is a new Popup Window. */
POPUP,
/**
* The target of the href is not known. This is maybe, if a javascript
* function is directly called.
*/
UNKNOWN;
}
/**
* The instance variable stores if the execution of the command needs a
* confirmation of the user. The default value is false.
*
* @see #isAskUser
* @see #setAskUser
*/
private boolean askUser = false;
/**
* If the instance variable is set to tree, the command is selected
* as default command in the navigation tree.
*
* @see #isDefaultSelected
* @see #setDefaultSelected
*/
private boolean defaultSelected = false;
/**
* Instance variable to hold the reference to the icon file.
*
* @see #setIcon
* @see #getIcon
*/
private String icon = null;
/**
* The instance variable stores the label of this command instance. The
* default value is set from the constructor to the name plus extension
* '.Label'.
*
* @see #getLabel
* @see #setLabel
*/
private String label = null;
/**
* Instance variable to hold the reference to call.
*
* @see #setReference
* @see #getReference
*/
private String reference = null;
/**
* If the value is set to true. the commands submits the current form
* to the given href url and the given target. The default value is
* false.
*
* @see #isSubmit
* @see #setSubmit
*/
private boolean submit = false;
/**
* Number of rows that must be committed. Special meanings:
*
* -
* 0: the mechanism expects at least one. Default
* -
* -1: the mechanism is deactivated.
* -
* 1, 2, 3 ...: the exact number of selected rows will be checked.
*
*
*/
private int submitSelectedRows = 0;
/**
* The target of the command is the content frame.
*
* @see #isTargetContent
* @see #isTargetPopup
* @set #getTarget
* @see #setTarget
*/
private Target target = AbstractCommand.Target.UNKNOWN;
/**
* The instance variable stores the height for the target bottom. Only a is
* set, the value is used from the JSP pages.
*
* @see #getTargetBottomHeight
* @see #setTargetBottomHeight
*/
private int targetBottomHeight = 0;
/**
* The instance variable stores the target connect attribute used for the
* connect in a form.
*
* @see #getTargetConnectAttribute
* @see #setTargetConnectAttribute
*/
private Attribute targetConnectAttribute = null;
/**
* The instance variable stores the create type for the target user
* interface object.
*
* @see #getTargetCreateType
* @see #setTargetCreateType
*/
private Type targetCreateType = null;
/**
* Classifications that will be added to the object on create.
*/
private final Set targetCreateClassification = new HashSet();
/**
* Is the target Menu/Command the default.
*/
private boolean targetDefaultMenu = true;
/**
* The instance variable stores the target user interface form object which
* is shown by the this abstract commmand.
*
* @see #getTargetForm
* @see #setTargetForm
*/
private Form targetForm = null;
/**
* The instance method stores the complete menu. Default value is a null and
* no menu is shown.
*
* @see #setTargetMenu
* @see #getTargetMenu
*/
private Menu targetMenu = null;
/**
* The instance method stores the command that will be executed after this
* command.
*/
private AbstractCommand targetCommand = null;
/**
* Should the revise/previous button be rendered.
*/
private boolean targetCmdRevise = true;
/**
* The instance variable stores the mode of the target user interface
* object.
*
* @see #getTargetMode
* @see #setTargetMode
*/
private TargetMode targetMode = TargetMode.UNKNOWN;
/**
* The instance variable stores the search of target user interface object.
*
* @see #getTargetSearch
* @see #setTargetSearch
*/
private Search targetSearch = null;
/**
* Standard checkboxes for a table must be shown. The checkboxes are used
* e.g. to delete selected.
*
* @see #isTargetShowCheckBoxes
*/
private boolean targetShowCheckBoxes = false;
/**
* The instance variable stores the target user interface table object which
* is shown by the this abstract commmand.
*
* @see #getTargetTable
* @see #setTargetTable
*/
private Table targetTable = null;
/**
* The instance variable stores for target user interface table object the
* default sort direction. The default value is NONE. .
*
* @see #getTargetTableSortDirection
* @see #setTargetTableSortDirection
*/
private SortDirection targetTableSortDirection = AbstractCommand.SortDirection.NONE;
/**
* The instance variable stores for target user interface table object the
* default sort key.
*
* @see #getTargetTableSortKey
* @see #setTargetTableSortKey
*/
private String targetTableSortKey = null;
/**
* Sets the title of the target window.
*
* @see #getTargetTitle
* @see #setTargetTitle
*/
private String targetTitle = null;
/**
* The instance variable stores the window height of the popup window (
* {@link #target} is set to {@link #TARGET_POPUP}). The default value is
* 400.
*
* @see #getWindowHeight
* @see #setWindowHeight
*/
private int windowHeight = 400;
/**
* The instance variable stores the window width of the popup window (
* {@link #target} is set to {@link #TARGET_POPUP}). The default value is
* 600.
*
* @see #getWindowWidth
* @see #setWindowWidth
*/
private int windowWidth = 600;
/**
* Does the executed esjp return a file that must be shown.
*/
private boolean targetShowFile = false;
/**
* Must the update after command be deactivated.
*/
private boolean noUpdateAfterCmd;
/**
* Name of the field the Structurbrowser sits in the target.
*/
private String targetStructurBrowserField;
/**
* Name of the target wiki.
*/
private String targeHelp;
/**
* Constructor to set the id and name of the command object. The constructor
* also sets the label of the command and the titel of the target.
*
* @param _id id of the command to set
* @param _name name of the command to set
* @param _uuid uuid of the command to set
* @see #label
*/
protected AbstractCommand(final long _id,
final String _uuid,
final String _name)
{
super(_id, _uuid, _name);
this.label = _name + ".Label";
this.targetTitle = _name + ".Title";
}
/**
* Add a new role for access to this command.
*
* @param _role Role to add
* @see #access
* @see #getAccess
*/
protected void add(final Role _role)
{
getAccess().add(_role);
}
/**
* Get the current icon reference value.
*
* @return the value of the instance variable {@link #icon}.
* @see #icon
* @see #setIcon
*/
public String getIcon()
{
return this.icon;
}
/**
* This method returns the Property of the Label and not the name.
*
* @return String
*/
public String getLabelProperty()
{
return DBProperties.getProperty(this.label);
}
/**
* This is the setter method for the instance variable {@link #label}.
*
* @return value of instance variable {@link #label}
* @see #label
* @see #setLabel
*/
public String getLabel()
{
return this.label;
}
/**
* Get the current reference value.
*
* @return the value of the instance variable {@link #reference}.
* @see #reference
* @see #setReference
*/
public String getReference()
{
return this.reference;
}
/**
* This is the setter method for the instance variable {@link #target}.
*
* @return value of instance variable {@link #target}
* @see #target
* @see #setTarget
*/
public Target getTarget()
{
return this.target;
}
/**
* This is the setter method for the instance variable
* {@link #targetBottomHeight}.
*
* @return value of instance variable {@link #targetBottomHeight}
* @see #targetBottomHeight
* @see #setTargetBottomHeight
*/
public int getTargetBottomHeight()
{
return this.targetBottomHeight;
}
/**
* This is the setter method for the instance variable
* {@link #targetConnectAttribute}.
*
* @return value of instance variable {@link #targetConnectAttribute}
* @see #targetConnectAttribute
* @see #setTargetConnectAttribute
*/
public Attribute getTargetConnectAttribute()
{
return this.targetConnectAttribute;
}
/**
* This is the setter method for the instance variable
* {@link #targetCreateType}.
*
* @return value of instance variable {@link #targetCreateType}
* @see #targetCreateType
* @see #setTargetCreateType
*/
public Type getTargetCreateType()
{
return this.targetCreateType;
}
/**
* This is the getter method for the instance variable
* {@link #targetDefaultMenu}.
*
* @return value of instance variable {@link #targetDefaultMenu}
*/
public boolean hasTargetDefaultMenu()
{
return this.targetDefaultMenu;
}
/**
* This is the setter method for the instance variable {@link #targetForm}.
*
* @return value of instance variable {@link #targetForm}
* @see #targetForm
* @see #setTargetForm
*/
public Form getTargetForm()
{
return this.targetForm;
}
/**
* Getter method for the instance variable {@link #targetMenu}.
* Adds the default menus if allowed ({@link #targetDefaultMenu}
* defined in an SystemConfiguration.
*
* @return value of instance variable {@link #targetMenu}
* @throws EFapsException on error
* @see #targetMenu
* @see #setTargetMenu
*/
public Menu getTargetMenu()
throws EFapsException
{
Menu ret = this.targetMenu;
if (this.targetDefaultMenu && EFapsSystemConfiguration.KERNEL.get().getAttributeValue("DefaultMenu") != null) {
// reads the Value from "Common_Main_DefaultMenu"
if (EFapsSystemConfiguration.KERNEL.get().getAttributeValue("DefaultMenu").equals("none")) {
ret = this.targetMenu;
} else {
final Properties prop = EFapsSystemConfiguration.KERNEL.get()
.getAttributeValueAsProperties("DefaultMenu");
for (int i = 0; i < 99; i++) {
if (prop.getProperty("Menu" + i) != null) {
final String menuname = prop.getProperty("Menu" + i);
if (getTargetTable() != null) {
// if no Enable4TableN property is set or if the Enable4TableN is not false the default
// menu will be added
if (prop.getProperty("Enable4Table" + i) == null
|| (prop.getProperty("Enable4Table" + i) != null
&& !prop.getProperty("Enable4Table" + i).equals("false"))) {
if (this.targetMenu == null && ret == null) {
ret = Menu.get(menuname);
break;
} else {
this.targetMenu.addAll(Menu.get(menuname));
ret = this.targetMenu;
}
}
} else if (getTargetForm() != null) {
if (prop.getProperty("Enable4Form" + i) == null
|| ((prop.getProperty("Enable4Form" + i) != null
&& !prop.getProperty("Enable4Form" + i).equals("false")))) {
if (this.targetMenu == null && ret == null) {
ret = Menu.get(menuname);
break;
} else {
this.targetMenu.addAll(Menu.get(menuname));
ret = this.targetMenu;
}
}
}
} else {
break;
}
}
}
}
return ret;
}
/**
* Getter method for instance variable {@link #targetCommand}.
*
* @return value of instance variable {@link #targetCommand}
*/
public AbstractCommand getTargetCommand()
{
return this.targetCommand;
}
/**
* Getter method for instance variable {@link #targeHelp}.
*
* @return value of instance variable {@link #targeHelp}
*/
public String getTargetHelp()
{
return this.targeHelp;
}
/**
* Getter method for instance variable {@link #targetCmdRevise}.
*
* @return value of instance variable {@link #targetCmdRevise}
*/
public boolean isTargetCmdRevise()
{
return this.targetCmdRevise;
}
/**
* @param _value comma separated list of classifications
* @throws CacheReloadException on error
*/
private void setTargetCreateClassifications(final String _value)
throws CacheReloadException
{
final String[] values = _value.split(",");
for (final String value : values) {
final Type classification = Type.get(value.trim());
if (classification != null) {
this.targetCreateClassification.add((Classification) classification);
}
}
}
/**
* Getter method for instance variable {@link #targetCreateClassification}.
*
* @return value of instance variable {@link #targetCreateClassification}
*/
public Set getTargetCreateClassification()
{
return this.targetCreateClassification;
}
/**
* This is the setter method for the instance variable {@link #targetMode}.
*
* @return value of instance variable {@link #targetMode}
* @see #targetMode
* @see #setTargetMode
*/
public TargetMode getTargetMode()
{
return this.targetMode;
}
/**
* This is the setter method for the instance variable {@link #targetSearch}
* .
*
* @return value of instance variable {@link #targetSearch}
* @see #targetSearch
* @see #setTargetSearch
*/
public Search getTargetSearch()
{
return this.targetSearch;
}
/**
* This is the setter method for the instance variable {@link #targetTable}.
*
* @return value of instance variable {@link #targetTable}
* @see #targetTable
* @see #setTargetTable
*/
public Table getTargetTable()
{
return this.targetTable;
}
/**
* This is the setter method for the instance variable
* {@link #targetTableSortDirection}.
*
* @return value of instance variable {@link #targetTableSortDirection}
* @see #targetTableSortDirection
* @see #setTargetTableSortDirection
*/
public SortDirection getTargetTableSortDirection()
{
return this.targetTableSortDirection;
}
/**
* This is the setter method for the instance variable
* {@link #targetTableSortKey}.
*
* @return value of instance variable {@link #targetTableSortKey}
* @see #targetTableSortKey
* @see #setTargetTableSortKey
*/
public String getTargetTableSortKey()
{
return this.targetTableSortKey;
}
/**
* This is the setter method for the instance variable {@link #targetTitle}.
*
* @return value of instance variable {@link #targetTitle}
* @see #targetTitle
* @see #setTargetTitle
*/
public String getTargetTitle()
{
return this.targetTitle;
}
/**
* The instance method returns the label of a command (or also menu). The
* instance method looks in the DBProperties, if a property entry with
* prefix Command. and name is found. This value is returned. If no
* entry is found, the name of the command is returned.
*
* @return label of the command (or menu)
*/
public String getViewableName()
{
String name = getName();
if (DBProperties.hasProperty("Command." + getName())) {
name = DBProperties.getProperty("Command." + getName());
}
return name;
}
/**
* This is the getter method for the instance variable {@link #windowHeight}
* .
*
* @return value of instance variable {@link #windowHeight}
* @see #windowHeight
* @see #setWindowHeight
*/
public int getWindowHeight()
{
return this.windowHeight;
}
/**
* This is the getter method for the instance variable {@link #windowWidth}.
*
* @return value of instance variable {@link #windowWidth}
* @see #windowWidth
* @see #setWindowWidth
*/
public int getWindowWidth()
{
return this.windowWidth;
}
/**
* This is the getter method for the instance variable {@link #askUser}.
*
* @return value of instance variable {@link #askUser}
* @see #askUser
* @see #setAskUser
*/
public boolean isAskUser()
{
return this.askUser;
}
/**
* This is the setter method for the instance variable
* {@link #defaultSelected}.
*
* @return value of instance variable {@link #defaultSelected}
* @see #defaultSelected
* @see #setDefaultSelected
*/
public boolean isDefaultSelected()
{
return this.defaultSelected;
}
/**
* This is the setter method for the instance variable {@link #submit}.
*
* @return value of instance variable {@link #submit}
* @see #submit
* @see #setSubmit
*/
public boolean isSubmit()
{
return this.submit;
}
/**
* Getter method for the instance variable {@link #submitSelectedRows}.
*
* @return value of instance variable {@link #submitSelectedRows}
*/
public int getSubmitSelectedRows()
{
return this.submitSelectedRows;
}
/**
* Test, if the value of instance variable {@link #target} is equal to
* {@link #TARGET_CONTENT}.
*
* @return true if value is equal, otherwise false
* @see #target
* @see #getTarget
*/
public boolean isTargetContent()
{
return getTarget() == AbstractCommand.Target.CONTENT;
}
/**
* Test, if the value of instance variable {@link #target} is equal to
* {@link #TARGET_HIDDEN}.
*
* @return true if value is equal, otherwise false
* @see #target
* @see #getTarget
*/
public boolean isTargetHidden()
{
return getTarget() == AbstractCommand.Target.HIDDEN;
}
/**
* Test, if the value of instance variable {@link #target} is equal to
* {@link #TARGET_POPUP}.
*
* @return true if value is equal, otherwise false
* @see #target
* @see #getTarget
*/
public boolean isTargetPopup()
{
return getTarget() == AbstractCommand.Target.POPUP;
}
/**
* This is the setter method for the instance variable
* {@link #targetShowCheckBoxes}.
*
* @return value of instance variable {@link #targetShowCheckBoxes}
*/
public boolean isTargetShowCheckBoxes()
{
return this.targetShowCheckBoxes;
}
/**
* Getter method for instance variable {@link #targetShowFile}.
*
* @return value of instance variable {@link #targetShowFile}
*/
public boolean isTargetShowFile()
{
return this.targetShowFile;
}
/**
* Getter method for instance variable {@link #noUpdateAfterCmd}.
*
* @return value of instance variable {@link #noUpdateAfterCmd}
*/
public boolean isNoUpdateAfterCmd()
{
return this.noUpdateAfterCmd;
}
/**
* Getter method for instance variable {@link #targetStructurBrowserField}.
*
* @return value of instance variable {@link #targetStructurBrowserField}
*/
public String getTargetStructurBrowserField()
{
return this.targetStructurBrowserField;
}
/**
* @param _linkType type of the link property
* @param _toId to id
* @param _toType to type
* @param _toName to name
* @throws EFapsException on error
*/
@Override
protected void setLinkProperty(final Type _linkType,
final long _toId,
final Type _toType,
final String _toName)
throws EFapsException
{
if (_linkType.isKindOf(CIAdminUserInterface.LinkIcon.getType())) {
this.icon = RequestHandler.replaceMacrosInUrl(RequestHandler.URL_IMAGE + _toName);
} else if (_linkType.isKindOf(CIAdminUserInterface.LinkTargetForm.getType())) {
this.targetForm = Form.get(_toId);
} else if (_linkType.isKindOf(CIAdminUserInterface.LinkTargetMenu.getType())) {
this.targetMenu = Menu.get(_toId);
} else if (_linkType.isKindOf(CIAdminUserInterface.LinkTargetSearch.getType())) {
this.targetSearch = Search.get(_toId);
} else if (_linkType.isKindOf(CIAdminUserInterface.LinkTargetTable.getType())) {
this.targetTable = Table.get(_toId);
} else if (_linkType.isKindOf(CIAdminUserInterface.LinkTargetCommand.getType())) {
this.targetCommand = Command.get(_toId);
} else if (_linkType.isKindOf(CIAdminUserInterface.LinkTargetHelp.getType())) {
this.targeHelp = _toName;
} else {
super.setLinkProperty(_linkType, _toId, _toType, _toName);
}
}
/**
* The instance method sets a new property value.
*
* @param _name name of the property
* @param _value value of the property
* @throws CacheReloadException on error during reload
*/
@Override
protected void setProperty(final String _name,
final String _value)
throws CacheReloadException
{
if ("AskUser".equals(_name)) {
this.askUser = "true".equalsIgnoreCase(_value);
} else if ("DefaultSelected".equals(_name)) {
this.defaultSelected = "true".equalsIgnoreCase(_value);
} else if ("HRef".equals(_name)) {
this.reference = RequestHandler.replaceMacrosInUrl(_value);
} else if ("Label".equals(_name)) {
this.label = _value;
} else if ("Submit".equals(_name)) {
this.submit = "true".equalsIgnoreCase(_value);
} else if ("SubmitSelectedRows".equals(_name)) {
this.submitSelectedRows = Integer.parseInt(_value);
} else if ("Target".equals(_name)) {
if ("content".equals(_value)) {
this.target = AbstractCommand.Target.CONTENT;
} else if ("hidden".equals(_value)) {
this.target = AbstractCommand.Target.HIDDEN;
} else if ("popup".equals(_value)) {
this.target = AbstractCommand.Target.POPUP;
} else if ("modal".equals(_value)) {
this.target = AbstractCommand.Target.MODAL;
}
} else if ("TargetBottomHeight".equals(_name)) {
this.targetBottomHeight = Integer.parseInt(_value);
} else if ("TargetCmdRevise".equals(_name)) {
this.targetCmdRevise = "TRUE".equalsIgnoreCase(_value);
} else if ("TargetConnectAttribute".equals(_name)) {
this.targetConnectAttribute = Attribute.get(_value);
} else if ("TargetCreateType".equals(_name)) {
this.targetCreateType = Type.get(_value);
} else if ("TargetCreateClassifications".equals(_name)) {
setTargetCreateClassifications(_value);
} else if ("TargetDefaultMenu".equals(_name)) {
this.targetDefaultMenu = "none".equalsIgnoreCase(_value);
} else if ("TargetMode".equals(_name)) {
if ("create".equals(_value)) {
this.targetMode = TargetMode.CREATE;
} else if ("edit".equals(_value)) {
this.targetMode = TargetMode.EDIT;
} else if ("connect".equals(_value)) {
this.targetMode = TargetMode.CONNECT;
} else if ("search".equals(_value)) {
this.targetMode = TargetMode.SEARCH;
} else if ("view".equals(_value)) {
this.targetMode = TargetMode.VIEW;
}
} else if ("TargetShowCheckBoxes".equals(_name)) {
this.targetShowCheckBoxes = "true".equalsIgnoreCase(_value);
} else if ("TargetTableSortKey".equals(_name)) {
this.targetTableSortKey = _value;
this.targetTableSortDirection = AbstractCommand.SortDirection.ASCENDING;
} else if ("TargetTableSortDirection".equals(_name)) {
if (AbstractCommand.SortDirection.DESCENDING.value.equals(_value)) {
this.targetTableSortDirection = AbstractCommand.SortDirection.DESCENDING;
} else {
this.targetTableSortDirection = AbstractCommand.SortDirection.ASCENDING;
}
} else if ("TargetTitle".equals(_name)) {
this.targetTitle = _value;
} else if ("TargetShowFile".equals(_name)) {
this.targetShowFile = "true".equalsIgnoreCase(_value);
} else if ("NoUpdateAfterCOMMAND".equals(_name)) {
this.noUpdateAfterCmd = "true".equalsIgnoreCase(_value);
} else if ("TargetStructurBrowserField".equals(_name)) {
this.targetStructurBrowserField = _value.trim();
} else if ("WindowHeight".equals(_name)) {
this.windowHeight = Integer.parseInt(_value);
} else if ("WindowWidth".equals(_name)) {
this.windowWidth = Integer.parseInt(_value);
} else {
super.setProperty(_name, _value);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy