/**
* ***************************************************************************
* Copyright (c) 2010 Qcadoo Limited
* Project: Qcadoo Framework
* Version: 1.4
*
* This file is part of Qcadoo.
*
* Qcadoo is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation; either version 3 of the License,
* or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* ***************************************************************************
*/
package com.qcadoo.view.internal.ribbon;
import com.qcadoo.security.api.SecurityRole;
import com.qcadoo.view.api.ribbon.RibbonActionItem;
import com.qcadoo.view.internal.api.ViewDefinition;
import com.qcadoo.view.internal.ribbon.model.InternalRibbonActionItem;
import com.qcadoo.view.internal.ribbon.model.InternalRibbonGroup;
import com.qcadoo.view.internal.ribbon.model.RibbonActionItemImpl;
import com.qcadoo.view.internal.ribbon.model.RibbonGroupImpl;
public class RibbonTemplates {
private static final String ACTIONS = "actions";
private static final String STATES = "states";
private static final String GENERIC_EXPORT = "genericExport";
public InternalRibbonGroup getGroupTemplate(final String templateName, final ViewDefinition viewDefinition,
final SecurityRole role) {
if ("navigation".equals(templateName)) {
return createNavigationTemplate(viewDefinition, role);
} else if ("gridNewAndRemoveAction".equals(templateName)) {
return createGridNewAndRemoveActionsTemplate(viewDefinition, role);
} else if ("gridNewCopyAndRemoveAction".equals(templateName)) {
return createGridNewCopyAndRemoveActionsTemplate(viewDefinition, role);
} else if ("gridNewAndCopyAction".equals(templateName)) {
return createGridNewAndCopyActionsTemplate(viewDefinition, role);
} else if ("gridNewAction".equals(templateName)) {
return createGridNewActionTemplate(viewDefinition, role);
} else if ("gridRemoveAction".equals(templateName)) {
return createGridRemoveActionTemplate(viewDefinition, role);
} else if ("gridActivateAndDeactivateAction".equals(templateName)) {
return createGridActivateAndDeactivateActionsTemplate(viewDefinition, role);
} else if ("gridGenericExportAction".equals(templateName)) {
return createGridGenericExportActionsTemplate(viewDefinition, role);
} else if ("formSaveCopyAndRemoveActions".equals(templateName)) {
return createFormSaveCopyAndRemoveActionsTemplate(viewDefinition, role);
} else if ("formSaveAndRemoveActions".equals(templateName)) {
return createFormSaveAndRemoveActionsTemplate(viewDefinition, role);
} else if ("formCopyAndSaveNewActions".equals(templateName)) {
return createFormCopyAndSaveNewActionsTemplate(viewDefinition, role);
} else if ("formSaveAndBackAndRemoveActions".equals(templateName)) {
return createFormSaveAndBackAndRemoveActionsTemplate(viewDefinition, role);
} else if ("formSaveAndCancelActions".equals(templateName)) {
return createFormSaveAndCancelActionsTemplate(viewDefinition, role);
} else if ("formSaveAction".equals(templateName)) {
return createFormSaveActionTemplate(viewDefinition, role);
} else if ("formActivateAndDeactivateAction".equals(templateName)) {
return createFormActivateAndDeactivateActionsTemplate(viewDefinition, role);
} else {
throw new IllegalStateException("Unsupported ribbon template : " + templateName);
}
}
private InternalRibbonGroup createNavigationTemplate(final ViewDefinition viewDefinition, final SecurityRole role) {
InternalRibbonActionItem ribbonBackAction = new RibbonActionItemImpl();
ribbonBackAction.setAction(RibbonUtils.translateRibbonAction("#{window}.performBack", viewDefinition));
ribbonBackAction.setIcon("backIcon24.png");
ribbonBackAction.setName("back");
ribbonBackAction.setEnabled(true);
ribbonBackAction.setType(RibbonActionItem.Type.BIG_BUTTON);
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl("navigation", role);
ribbonGroup.addItem(ribbonBackAction);
return ribbonGroup;
}
private InternalRibbonGroup createGridNewAndRemoveActionsTemplate(final ViewDefinition viewDefinition, final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(ACTIONS, role);
ribbonGroup.addItem(createGridNewAction(viewDefinition));
ribbonGroup.addItem(createGridDeleteAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonGroup createGridRemoveActionTemplate(final ViewDefinition viewDefinition, final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(ACTIONS, role);
ribbonGroup.addItem(createGridDeleteAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonGroup createGridNewAndCopyActionsTemplate(final ViewDefinition viewDefinition, final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(ACTIONS, role);
ribbonGroup.addItem(createGridNewAction(viewDefinition));
ribbonGroup.addItem(createGridCopyAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonGroup createGridNewActionTemplate(final ViewDefinition viewDefinition, final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(ACTIONS, role);
ribbonGroup.addItem(createGridNewAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonGroup createGridNewCopyAndRemoveActionsTemplate(final ViewDefinition viewDefinition,
final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(ACTIONS, role);
ribbonGroup.addItem(createGridNewAction(viewDefinition));
ribbonGroup.addItem(createGridCopyAction(viewDefinition));
ribbonGroup.addItem(createGridDeleteAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonGroup createGridActivateAndDeactivateActionsTemplate(final ViewDefinition viewDefinition,
final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(STATES, role);
ribbonGroup.addItem(createGridActivateAction(viewDefinition));
ribbonGroup.addItem(createGridDeactivateAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonGroup createGridGenericExportActionsTemplate(final ViewDefinition viewDefinition,
final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(GENERIC_EXPORT, role);
ribbonGroup.addItem(createGridExportCsvAction(viewDefinition));
ribbonGroup.addItem(createGridExportPdfAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonActionItem createGridDeleteAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonDeleteAction = new RibbonActionItemImpl();
ribbonDeleteAction.setAction(RibbonUtils.translateRibbonAction("#{grid}.performDelete;", viewDefinition));
ribbonDeleteAction.setIcon("deleteIcon16.png");
ribbonDeleteAction.setName("delete");
ribbonDeleteAction.setType(RibbonActionItem.Type.SMALL_BUTTON);
ribbonDeleteAction.setEnabled(false);
ribbonDeleteAction.setDefaultEnabled(false);
ribbonDeleteAction.setScript("var listener = {onChange: function(selectedArray) {if (selectedArray.length == 0) {"
+ "this.disable();} else {this.enable();}}}; #{grid}.addOnChangeListener(listener);");
return ribbonDeleteAction;
}
private InternalRibbonActionItem createGridCopyAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonCopyAction = new RibbonActionItemImpl();
ribbonCopyAction.setAction(RibbonUtils.translateRibbonAction("#{grid}.performCopy;", viewDefinition));
ribbonCopyAction.setIcon("copyIcon16.png");
ribbonCopyAction.setName("copy");
ribbonCopyAction.setEnabled(false);
ribbonCopyAction.setDefaultEnabled(false);
ribbonCopyAction.setScript("var listener = {onChange: function(selectedArray) {if (selectedArray.length == 0) {"
+ "this.disable();} else {this.enable();}}}; #{grid}.addOnChangeListener(listener);");
ribbonCopyAction.setType(RibbonActionItem.Type.SMALL_BUTTON);
return ribbonCopyAction;
}
private InternalRibbonActionItem createGridNewAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonNewAction = new RibbonActionItemImpl();
ribbonNewAction.setAction(RibbonUtils.translateRibbonAction("#{grid}.performNew;", viewDefinition));
ribbonNewAction.setIcon("newIcon24.png");
ribbonNewAction.setName("new");
ribbonNewAction.setEnabled(true);
ribbonNewAction.setType(RibbonActionItem.Type.BIG_BUTTON);
return ribbonNewAction;
}
private InternalRibbonActionItem createGridActivateAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonActivateAction = new RibbonActionItemImpl();
ribbonActivateAction.setAction(RibbonUtils.translateRibbonAction("#{grid}.performActivate;", viewDefinition));
ribbonActivateAction.setIcon("unactiveVisibleIcon.png");
ribbonActivateAction.setName("activate");
ribbonActivateAction.setEnabled(false);
ribbonActivateAction.setScript("var listener = {onChange: function(selectedArray) {if (selectedArray.length == 0) {"
+ "this.disable();} else {this.enable();}}}; #{grid}.addOnChangeListener(listener);");
ribbonActivateAction.setType(RibbonActionItem.Type.SMALL_BUTTON);
return ribbonActivateAction;
}
private InternalRibbonActionItem createGridDeactivateAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonDeactivateAction = new RibbonActionItemImpl();
ribbonDeactivateAction.setAction(RibbonUtils.translateRibbonAction("#{grid}.performDeactivate;", viewDefinition));
ribbonDeactivateAction.setIcon("unactiveNotVisibleIcon.png");
ribbonDeactivateAction.setName("deactivate");
ribbonDeactivateAction.setEnabled(false);
ribbonDeactivateAction.setScript("var listener = {onChange: function(selectedArray) {if (selectedArray.length == 0) {"
+ "this.disable();} else {this.enable();}}}; #{grid}.addOnChangeListener(listener);");
ribbonDeactivateAction.setType(RibbonActionItem.Type.SMALL_BUTTON);
return ribbonDeactivateAction;
}
private InternalRibbonActionItem createGridExportPdfAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonExportPdfAction = new RibbonActionItemImpl();
ribbonExportPdfAction.setIcon("pdfIcon16.png");
ribbonExportPdfAction.setName("pdf");
ribbonExportPdfAction.setEnabled(true);
ribbonExportPdfAction
.setScript("var listener = {onClick: function() {#{grid}.performEvent('exportToPdf', [], 'exportToPdf');}};"
+ " this.addOnChangeListener(listener);");
ribbonExportPdfAction.setType(RibbonActionItem.Type.SMALL_BUTTON);
return ribbonExportPdfAction;
}
private InternalRibbonActionItem createGridExportCsvAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonExportCsvAction = new RibbonActionItemImpl();
ribbonExportCsvAction.setIcon("exportToCsvIcon16.png");
ribbonExportCsvAction.setName("csv");
ribbonExportCsvAction.setEnabled(true);
ribbonExportCsvAction
.setScript("var listener = {onClick: function() {#{grid}.performEvent('exportToCsv', [], 'exportToCsv');}};"
+ " this.addOnChangeListener(listener);");
ribbonExportCsvAction.setType(RibbonActionItem.Type.SMALL_BUTTON);
return ribbonExportCsvAction;
}
private InternalRibbonGroup createFormSaveCopyAndRemoveActionsTemplate(final ViewDefinition viewDefinition,
final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(ACTIONS, role);
ribbonGroup.addItem(createFormSaveAction(viewDefinition));
ribbonGroup.addItem(createFormSaveAndBackAction(viewDefinition));
ribbonGroup.addItem(createFormSaveAndNewAction(viewDefinition));
ribbonGroup.addItem(createFormCopyAction(viewDefinition));
ribbonGroup.addItem(createFormCancelAction(viewDefinition));
ribbonGroup.addItem(createFormDeleteAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonGroup createFormCopyAndSaveNewActionsTemplate(final ViewDefinition viewDefinition,
final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(ACTIONS, role);
ribbonGroup.addItem(createFormSaveAndNewAction(viewDefinition));
ribbonGroup.addItem(createFormCopyAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonGroup createFormSaveAndRemoveActionsTemplate(final ViewDefinition viewDefinition,
final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(ACTIONS, role);
ribbonGroup.addItem(createFormSaveAction(viewDefinition));
ribbonGroup.addItem(createFormSaveAndBackAction(viewDefinition));
ribbonGroup.addItem(createFormCancelAction(viewDefinition));
ribbonGroup.addItem(createFormDeleteAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonGroup createFormSaveAndCancelActionsTemplate(final ViewDefinition viewDefinition,
final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(ACTIONS, role);
ribbonGroup.addItem(createFormSaveAction(viewDefinition));
ribbonGroup.addItem(createFormSaveAndBackAction(viewDefinition));
ribbonGroup.addItem(createFormCancelAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonGroup createFormSaveAndBackAndRemoveActionsTemplate(final ViewDefinition viewDefinition,
final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(ACTIONS, role);
ribbonGroup.addItem(createFormSaveAndBackAction(viewDefinition));
ribbonGroup.addItem(createFormCancelAction(viewDefinition));
ribbonGroup.addItem(createFormDeleteAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonGroup createFormSaveActionTemplate(final ViewDefinition viewDefinition, final SecurityRole role) {
InternalRibbonActionItem ribbonSaveAction = new RibbonActionItemImpl();
ribbonSaveAction.setAction(RibbonUtils
.translateRibbonAction("#{form}.performSave; #{window}.performBack", viewDefinition));
ribbonSaveAction.setIcon("saveBackIcon24.png");
ribbonSaveAction.setName("saveBack");
ribbonSaveAction.setType(RibbonActionItem.Type.BIG_BUTTON);
ribbonSaveAction.setEnabled(true);
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(ACTIONS, role);
ribbonGroup.addItem(ribbonSaveAction);
return ribbonGroup;
}
private InternalRibbonGroup createFormActivateAndDeactivateActionsTemplate(final ViewDefinition viewDefinition,
final SecurityRole role) {
InternalRibbonGroup ribbonGroup = new RibbonGroupImpl(STATES, role);
ribbonGroup.addItem(createFormActivateAction(viewDefinition));
ribbonGroup.addItem(createFormDeactivateAction(viewDefinition));
return ribbonGroup;
}
private InternalRibbonActionItem createFormDeleteAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonDeleteAction = new RibbonActionItemImpl();
ribbonDeleteAction.setAction(RibbonUtils.translateRibbonAction("#{form}.performDelete;", viewDefinition));
ribbonDeleteAction.setIcon("deleteIcon16.png");
ribbonDeleteAction.setName("delete");
ribbonDeleteAction.setType(RibbonActionItem.Type.SMALL_BUTTON);
ribbonDeleteAction.setEnabled(false);
ribbonDeleteAction.setDefaultEnabled(false);
ribbonDeleteAction
.setScript("var listener = {onSetValue: function(value) {if (!value || !value.content) return; if (value.content.entityId) {"
+ "this.enable();} else {this.disable();}}}; #{form}.addOnChangeListener(listener);");
return ribbonDeleteAction;
}
private InternalRibbonActionItem createFormCancelAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonCancelAction = new RibbonActionItemImpl();
ribbonCancelAction.setAction(RibbonUtils.translateRibbonAction("#{form}.performCancel;", viewDefinition));
ribbonCancelAction.setIcon("cancelIcon16.png");
ribbonCancelAction.setName("cancel");
ribbonCancelAction.setEnabled(true);
ribbonCancelAction.setType(RibbonActionItem.Type.SMALL_BUTTON);
return ribbonCancelAction;
}
private InternalRibbonActionItem createFormCopyAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonCopyAction = new RibbonActionItemImpl();
ribbonCopyAction.setAction(RibbonUtils.translateRibbonAction("#{form}.performCopy;", viewDefinition));
ribbonCopyAction.setIcon("copyIcon16.png");
ribbonCopyAction.setName("copy");
ribbonCopyAction.setType(RibbonActionItem.Type.SMALL_BUTTON);
ribbonCopyAction.setEnabled(false);
ribbonCopyAction.setDefaultEnabled(false);
// ribbonCopyAction.setMessage("recordNotCreated");
ribbonCopyAction
.setScript("var listener = {onSetValue: function(value) {if (!value || !value.content) return; if (value.content.entityId) {"
+ "this.enable();} else {this.disable();}}}; #{form}.addOnChangeListener(listener);");
return ribbonCopyAction;
}
private InternalRibbonActionItem createFormSaveAndBackAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonSaveBackAction = new RibbonActionItemImpl();
ribbonSaveBackAction.setAction(RibbonUtils.translateRibbonAction("#{form}.performSave; #{window}.performBack;",
viewDefinition));
ribbonSaveBackAction.setIcon("saveBackIcon24.png");
ribbonSaveBackAction.setName("saveBack");
ribbonSaveBackAction.setEnabled(true);
ribbonSaveBackAction.setType(RibbonActionItem.Type.BIG_BUTTON);
return ribbonSaveBackAction;
}
private InternalRibbonActionItem createFormSaveAndNewAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonSaveNewAction = new RibbonActionItemImpl();
ribbonSaveNewAction.setAction(RibbonUtils.translateRibbonAction("#{form}.performSaveAndClear;", viewDefinition));
ribbonSaveNewAction.setIcon("saveNewIcon16.png");
ribbonSaveNewAction.setName("saveNew");
ribbonSaveNewAction.setEnabled(true);
ribbonSaveNewAction.setType(RibbonActionItem.Type.SMALL_BUTTON);
return ribbonSaveNewAction;
}
private InternalRibbonActionItem createFormSaveAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonSaveAction = new RibbonActionItemImpl();
ribbonSaveAction.setAction(RibbonUtils.translateRibbonAction("#{form}.performSave;", viewDefinition));
ribbonSaveAction.setIcon("saveIcon24.png");
ribbonSaveAction.setName("save");
ribbonSaveAction.setEnabled(true);
ribbonSaveAction.setType(RibbonActionItem.Type.BIG_BUTTON);
return ribbonSaveAction;
}
private InternalRibbonActionItem createFormActivateAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonActivateAction = new RibbonActionItemImpl();
ribbonActivateAction.setAction(RibbonUtils.translateRibbonAction("#{form}.performActivate;", viewDefinition));
ribbonActivateAction.setIcon("unactiveVisibleIcon.png");
ribbonActivateAction.setName("activate");
ribbonActivateAction.setEnabled(false);
ribbonActivateAction
.setScript("var listener = {onSetValue: function(value) {if (!value || !value.content) return; if (value.content.entityId "
+ "&& !value.content.isActive) {this.enable();} else {this.disable();}}}; #{form}.addOnChangeListener(listener);");
ribbonActivateAction.setType(RibbonActionItem.Type.SMALL_BUTTON);
return ribbonActivateAction;
}
private InternalRibbonActionItem createFormDeactivateAction(final ViewDefinition viewDefinition) {
InternalRibbonActionItem ribbonDeactivateAction = new RibbonActionItemImpl();
ribbonDeactivateAction.setAction(RibbonUtils.translateRibbonAction("#{form}.performDeactivate;", viewDefinition));
ribbonDeactivateAction.setIcon("unactiveNotVisibleIcon.png");
ribbonDeactivateAction.setName("deactivate");
ribbonDeactivateAction.setEnabled(false);
ribbonDeactivateAction
.setScript("var listener = {onSetValue: function(value) {if (!value || !value.content) return; if (value.content.entityId "
+ "&& value.content.isActive) {this.enable();} else {this.disable();}}}; #{form}.addOnChangeListener(listener);");
ribbonDeactivateAction.setType(RibbonActionItem.Type.SMALL_BUTTON);
return ribbonDeactivateAction;
}
}