/* * (c) Copyright 2010-2011 AgileBirds * * This file is part of OpenFlexo. * * OpenFlexo is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * OpenFlexo 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>. * */ package org.openflexo.foundation.ie.wizards; import java.util.Arrays; import java.util.Date; import java.util.List; import org.openflexo.foundation.FlexoModelObject; import org.openflexo.foundation.bindings.BindingDefinition; import org.openflexo.foundation.dm.DMType; import org.openflexo.foundation.dm.eo.DMEOPrototype; import org.openflexo.foundation.ie.util.DropDownType; import org.openflexo.foundation.ie.util.TextFieldType; import org.openflexo.foundation.ie.widget.IECheckBoxWidget; import org.openflexo.foundation.ie.widget.IEControlWidget; import org.openflexo.foundation.ie.widget.IEDropDownWidget; import org.openflexo.foundation.ie.widget.IEStringWidget; import org.openflexo.foundation.ie.widget.IETextAreaWidget; import org.openflexo.foundation.ie.widget.IETextFieldWidget; import org.openflexo.foundation.ie.widget.IEWidget; import org.openflexo.toolbox.ToolBox; public class PropertyProposalFactory { private List relevantWidgets; private EntityFromWidgets entityFromWidgets; private PropertyProposalFactory() { super(); relevantWidgets = Arrays.asList(IETextFieldWidget.class, IETextAreaWidget.class, IEDropDownWidget.class, IEStringWidget.class, IECheckBoxWidget.class); } public static PropertyProposalFactory getFactory(EntityFromWidgets entityFromWidgets) { PropertyProposalFactory reply = new PropertyProposalFactory(); reply.entityFromWidgets = entityFromWidgets; return reply; } public boolean isRelevant(FlexoModelObject widget) { if (widget instanceof IEControlWidget && ((IEControlWidget) widget).getIsFilterForRepetition() != null) { return false; } if (relevantWidgets.contains(widget.getClass())) { return true; } return false; } private String transformPropertyNameIntoUniquePropertyName(String propertyName) { if (propertyName == null) { return null; } String originalPropertyName = propertyName; int i = 1; while (entityFromWidgets.isPropertyNameUsed(propertyName)) { propertyName = originalPropertyName + i; i++; } return propertyName; } public PropertyProposal getEOAttributeProposal(IEWidget widget) { String propertyName = ToolBox.convertStringToJavaString(widget.getCalculatedLabel()); transformPropertyNameIntoUniquePropertyName(propertyName); if (widget instanceof IEStringWidget) { if (propertyName == null) { propertyName = transformPropertyNameIntoUniquePropertyName("textAttribute"); } DMEOPrototype p = findBestProptotype((IEStringWidget) widget); return new EOAttributeProposal(widget, propertyName, p); } else if (widget instanceof IETextFieldWidget) { if (propertyName == null) { propertyName = transformPropertyNameIntoUniquePropertyName("textAttribute"); } DMEOPrototype p = findBestProptotype((IETextFieldWidget) widget); return new EOAttributeProposal(widget, propertyName, p); } else if (widget instanceof IETextAreaWidget) { if (propertyName == null) { propertyName = transformPropertyNameIntoUniquePropertyName("longTextAttribute"); } return new EOAttributeProposal(widget, propertyName, widget.getProject().getDataModel().getPrototypeNamed("clob")); } else if (widget instanceof IECheckBoxWidget) { if (propertyName == null) { propertyName = transformPropertyNameIntoUniquePropertyName("isTrue"); } else { propertyName = "is" + ToolBox.capitalize(propertyName, true); } return new EOAttributeProposal(widget, propertyName, widget.getProject().getDataModel().getPrototypeNamed("boolean")); } else if (widget instanceof IEDropDownWidget) { if (propertyName == null) { propertyName = transformPropertyNameIntoUniquePropertyName("typeProperty"); } if (((IEDropDownWidget) widget).getDropdownType() == DropDownType.DOMAIN_KEY_VALUE) { return new EOAttributeProposal(widget, propertyName, widget.getProject().getDataModel().getPrototypeNamed("str10")); } else { return new EOAttributeProposal(widget, propertyName, widget.getProject().getDataModel().getPrototypeNamed("str100")); } } return null; } private DMEOPrototype findBestProptotype(IEStringWidget widget) { if (widget.getFieldType() == TextFieldType.DATE) { return widget.getProject().getDataModel().getPrototypeNamed("date"); } if (widget.getFieldType() == TextFieldType.DOUBLE) { return widget.getProject().getDataModel().getPrototypeNamed("double"); } if (widget.getFieldType() == TextFieldType.FLOAT) { return widget.getProject().getDataModel().getPrototypeNamed("float"); } if (widget.getFieldType() == TextFieldType.INTEGER) { return widget.getProject().getDataModel().getPrototypeNamed("int"); } if (widget.getFieldType() == TextFieldType.KEYVALUE) { return widget.getProject().getDataModel().getPrototypeNamed("str10"); } if (widget.getFieldType() == TextFieldType.STATUS_LIST) { return widget.getProject().getDataModel().getPrototypeNamed("str50"); } return widget.getProject().getDataModel().getPrototypeNamed("str200"); } private DMEOPrototype findBestProptotype(IETextFieldWidget widget) { if (widget.getFieldType() == TextFieldType.DATE) { return widget.getProject().getDataModel().getPrototypeNamed("date"); } if (widget.getFieldType() == TextFieldType.DOUBLE) { return widget.getProject().getDataModel().getPrototypeNamed("double"); } if (widget.getFieldType() == TextFieldType.FLOAT) { return widget.getProject().getDataModel().getPrototypeNamed("float"); } if (widget.getFieldType() == TextFieldType.INTEGER) { return widget.getProject().getDataModel().getPrototypeNamed("int"); } if (widget.getFieldType() == TextFieldType.KEYVALUE) { return widget.getProject().getDataModel().getPrototypeNamed("str10"); } if (widget.getFieldType() == TextFieldType.STATUS_LIST) { return widget.getProject().getDataModel().getPrototypeNamed("str50"); } return widget.getProject().getDataModel().getPrototypeNamed("str200"); } public DMPropertyProposal getDMAttributeProposal(IEWidget widget) { String propertyName = ToolBox.convertStringToJavaString(widget.getCalculatedLabel()); transformPropertyNameIntoUniquePropertyName(propertyName); if (widget instanceof IETextFieldWidget) { if (propertyName == null) { propertyName = transformPropertyNameIntoUniquePropertyName("textAttribute"); } DMType t = findBestType((IETextFieldWidget) widget); return new DMPropertyProposal(widget, propertyName, t); } else if (widget instanceof IEStringWidget) { if (propertyName == null) { propertyName = transformPropertyNameIntoUniquePropertyName("textAttribute"); } DMType t = findBestType((IEStringWidget) widget); return new DMPropertyProposal(widget, propertyName, t); } else if (widget instanceof IETextAreaWidget) { if (propertyName == null) { propertyName = transformPropertyNameIntoUniquePropertyName("longTextAttribute"); } return new DMPropertyProposal(widget, propertyName, DMType.makeResolvedDMType(widget.getProject().getDataModel() .getDMEntity(String.class))); } else if (widget instanceof IECheckBoxWidget) { if (propertyName == null) { propertyName = transformPropertyNameIntoUniquePropertyName("isTrue"); } else { propertyName = "is" + ToolBox.capitalize(propertyName, true); } return new DMPropertyProposal(widget, propertyName, DMType.makeResolvedDMType(widget.getProject().getDataModel() .getDMEntity(Boolean.class))); } else if (widget instanceof IEDropDownWidget) { if (propertyName == null) { propertyName = transformPropertyNameIntoUniquePropertyName("typeProperty"); } if (((IEDropDownWidget) widget).getDropdownType() == DropDownType.DOMAIN_KEY_VALUE) { return new DMPropertyProposal(widget, propertyName, DMType.makeResolvedDMType(widget.getProject().getDataModel() .getDMEntity(String.class))); } else { return new DMPropertyProposal(widget, propertyName, DMType.makeResolvedDMType(widget.getProject().getDataModel() .getDMEntity(String.class))); } } return null; } private DMType findBestType(IEStringWidget widget) { if (widget.getFieldType() == TextFieldType.DATE) { return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(Date.class)); } if (widget.getFieldType() == TextFieldType.DOUBLE) { return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(Double.class)); } if (widget.getFieldType() == TextFieldType.FLOAT) { return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(Float.class)); } if (widget.getFieldType() == TextFieldType.INTEGER) { return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(Integer.class)); } if (widget.getFieldType() == TextFieldType.KEYVALUE) { return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(String.class)); } if (widget.getFieldType() == TextFieldType.STATUS_LIST) { return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(String.class)); } return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(String.class)); } private DMType findBestType(IETextFieldWidget widget) { if (widget.getFieldType() == TextFieldType.DATE) { return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(Date.class)); } if (widget.getFieldType() == TextFieldType.DOUBLE) { return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(Double.class)); } if (widget.getFieldType() == TextFieldType.FLOAT) { return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(Float.class)); } if (widget.getFieldType() == TextFieldType.INTEGER) { return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(Integer.class)); } if (widget.getFieldType() == TextFieldType.KEYVALUE) { return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(String.class)); } if (widget.getFieldType() == TextFieldType.STATUS_LIST) { return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(String.class)); } return DMType.makeResolvedDMType(widget.getProject().getDataModel().getDMEntity(String.class)); } public BindingDefinition retreiveRelevantBindingDefinition(IEWidget owner) { if (owner.getClass().equals(IETextFieldWidget.class)) { return ((IETextFieldWidget) owner).getBindingValueDefinition(); } else if (owner.getClass().equals(IETextAreaWidget.class)) { return ((IETextAreaWidget) owner).getBindingValueDefinition(); } else if (owner.getClass().equals(IEDropDownWidget.class)) { return ((IEDropDownWidget) owner).getBindingSelectionDefinition(); } else if (owner.getClass().equals(IEStringWidget.class)) { return ((IEStringWidget) owner).getBindingValueDefinition(); } else if (owner.getClass().equals(IECheckBoxWidget.class)) { return ((IECheckBoxWidget) owner).getBindingCheckedDefinition(); } return null; } }