/*
* (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.ie.view.controller.action;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.logging.Logger;
import javax.naming.InvalidNameException;
import org.openflexo.components.AskParametersDialog;
import org.openflexo.foundation.action.FlexoActionInitializer;
import org.openflexo.foundation.dm.ProjectDatabaseRepository;
import org.openflexo.foundation.ie.action.GenerateEntityFromSelection;
import org.openflexo.foundation.ie.wizards.EntityFromWidgets;
import org.openflexo.foundation.ie.wizards.PropertyProposal;
import org.openflexo.foundation.param.DMEOModelParameter;
import org.openflexo.foundation.param.ParameterDefinition;
import org.openflexo.foundation.param.ParametersModel;
import org.openflexo.foundation.param.RadioButtonListParameter;
import org.openflexo.foundation.param.TextFieldParameter;
import org.openflexo.localization.FlexoLocalization;
import org.openflexo.view.controller.ActionInitializer;
import org.openflexo.view.controller.ControllerActionInitializer;
import org.openflexo.view.controller.FlexoController;
public class GenerateEntityFromSelectionInitializer extends ActionInitializer {
private static final Logger logger = Logger.getLogger(ControllerActionInitializer.class.getPackage().getName());
GenerateEntityFromSelectionInitializer(IEControllerActionInitializer actionInitializer) {
super(GenerateEntityFromSelection.actionType, actionInitializer);
}
@Override
protected IEControllerActionInitializer getControllerActionInitializer() {
return (IEControllerActionInitializer) super.getControllerActionInitializer();
}
@Override
protected FlexoActionInitializer<GenerateEntityFromSelection> getDefaultInitializer() {
return new FlexoActionInitializer<GenerateEntityFromSelection>() {
@Override
public boolean run(EventObject e, GenerateEntityFromSelection action) {
return askWidgetMapping(action);
}
};
}
// RadioButtonListParameter dbRepositoryMode;
// PersistantRepositoryParameter dbrepositoryChooser;
// TextFieldParameter newDBRepositoryName;
RadioButtonListParameter eoModelMode;
TextFieldParameter newEOModelName;
DMEOModelParameter eoModelSelector;
TextFieldParameter newEntityName;
EntityFromWidgets entityFromWidgets;
public boolean askWidgetMapping(GenerateEntityFromSelection action) {
ParameterDefinition[] parameters = new ParameterDefinition[4];
// ======================= Database repository selection =========================//
// final String USE_EXISTING_DB_REPOSITORY = FlexoLocalization.localizedForKey("use_existing_db_repository");
// final String CREATE_DB_REPOSITORY = FlexoLocalization.localizedForKey("create_db_repository");
// String[] db_repository_modes = { USE_EXISTING_DB_REPOSITORY, CREATE_DB_REPOSITORY };
// dbRepositoryMode = new RadioButtonListParameter("dbRepositoryMode", "select_a_choice",
// atLeastOneDBRepositoryExist()?USE_EXISTING_DB_REPOSITORY:CREATE_DB_REPOSITORY, db_repository_modes);
// parameters[0] = dbRepositoryMode;
//
// dbrepositoryChooser = new PersistantRepositoryParameter("selectedDBRepository", "create_entity_in_repository", null);
// parameters[1] = dbrepositoryChooser;
// parameters[1].setDepends("dbRepositoryMode");
// parameters[1].setConditional("dbRepositoryMode=" + '"' + USE_EXISTING_DB_REPOSITORY + '"');
//
// String baseName = FlexoLocalization.localizedForKey("new_dbrepository_name");
// newDBRepositoryName = new TextFieldParameter("newProcessName", "name_of_the_new_dbrepository", getProject().getFlexoWorkflow()
// .findNextDefaultProcessName(baseName));
// parameters[2] = newDBRepositoryName;
// parameters[2].setDepends("dbRepositoryMode");
// parameters[2].setConditional("dbRepositoryMode=" + '"' + CREATE_DB_REPOSITORY + '"');
// ======================= Database eomodel selection =========================//
final String USE_EXISTING_EOMODEL = FlexoLocalization.localizedForKey("use_existing_eo_model");
final String CREATE_EOMODEL = FlexoLocalization.localizedForKey("create_new_eomodel");
String[] eomodel_modes = { USE_EXISTING_EOMODEL, CREATE_EOMODEL };
eoModelMode = new RadioButtonListParameter("eoModelMode", "select_a_choice", USE_EXISTING_EOMODEL, eomodel_modes);
parameters[0] = eoModelMode;
eoModelSelector = new DMEOModelParameter("eomodel", "eomodel_file", null);
parameters[1] = eoModelSelector;
parameters[1].setDepends("eoModelMode");
parameters[1].setConditional("eoModelMode=" + '"' + USE_EXISTING_EOMODEL + '"');
newEOModelName = new TextFieldParameter("newEOModelName", FlexoLocalization.localizedForKey("new_eomodel_name"), getProject()
.getDataModel().findNextDefaultEOModelName());
parameters[2] = newEOModelName;
parameters[2].setDepends("eoModelMode");
parameters[2].setConditional("eoModelMode=" + '"' + CREATE_EOMODEL + '"');
newEntityName = new TextFieldParameter("newEntityName", FlexoLocalization.localizedForKey("new_entity_name"), null);
parameters[3] = newEntityName;
entityFromWidgets = new EntityFromWidgets(getProject(), action.getSelection(), true);
AskParametersDialog dialog = AskParametersDialog.createAskParametersDialog(getProject(), null,
FlexoLocalization.localizedForKey("create_new_sub_process_node"),
FlexoLocalization.localizedForKey("what_would_you_like_to_do"), new AskParametersDialog.ValidationCondition() {
@Override
public boolean isValid(ParametersModel model) {
// if(dbRepositoryMode.getValue().equals(USE_EXISTING_DB_REPOSITORY)&&(dbrepositoryChooser.getValue()==null)){
// errorMessage = FlexoLocalization.localizedForKey("please_select_database_repository");
// return false;
// }
// if(dbRepositoryMode.getValue().equals(CREATE_DB_REPOSITORY)&&(newDBRepositoryName.getValue()==null)){
// errorMessage = FlexoLocalization.localizedForKey("please_specify_a_bdrepositoryname");
// return false;
// }
if (eoModelMode.getValue().equals(USE_EXISTING_EOMODEL) && eoModelSelector.getValue() == null) {
errorMessage = FlexoLocalization.localizedForKey("please_select_an_eomodelfile");
return false;
}
if (eoModelMode.getValue().equals(USE_EXISTING_EOMODEL) && eoModelSelector.getValue() != null
&& eoModelSelector.getValue().getRepository().isReadOnly()) {
errorMessage = FlexoLocalization
.localizedForKey("the_selected_eomodel_cannot_be_modified_please_choose_another_one_or_create_a_new_one");
return false;
}
if (eoModelMode.getValue().equals(CREATE_EOMODEL) && newEOModelName.getValue() == null) {
errorMessage = FlexoLocalization.localizedForKey("please_specify_an_eomodelfilename");
return false;
}
if (newEntityName.getValue() == null) {
errorMessage = FlexoLocalization.localizedForKey("please_specify_an_entityname");
return false;
}
return true;
}
}, parameters[0], parameters[1], parameters[2], parameters[3]);
if (dialog.getStatus() == AskParametersDialog.VALIDATE) {
if (entityFromWidgets != null) {
if (getProject().getDataModel().getProjectDatabaseRepositories().size() == 0) {
ProjectDatabaseRepository.createNewProjectDatabaseRepository(getProject().getDataModel(), getProject().getName()
+ "Databases");
}
String dbRepName = getProject().getDataModel().getProjectDatabaseRepositories().get(0).getName();
String eomName = eoModelMode.getValue().equals(USE_EXISTING_EOMODEL) ? eoModelSelector.getValue().getName()
: newEOModelName.getValue();
String eoentityName = newEntityName.getValue();
ArrayList selectedProps = new ArrayList<PropertyProposal>();
try {
entityFromWidgets.justDoIt(dbRepName, eomName, eoentityName, selectedProps, getEditor());
} catch (InvalidNameException e) {
e.printStackTrace();
FlexoController.showError(e.getMessage());
return false;
}
return true;
}
return false;
}
// CANCELLED
return false;
}
private boolean atLeastOneDBRepositoryExist() {
return getProject().getDataModel().getProjectDatabaseRepositories() != null
&& getProject().getDataModel().getProjectDatabaseRepositories().size() > 0;
}
}