package entitymodeler.actions; import java.io.File; import java.util.HashSet; import java.util.Set; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.actions.ActionFactory; import org.objectstyle.wolips.eomodeler.core.model.EODatabaseConfig; import org.objectstyle.wolips.eomodeler.core.model.EOModel; import org.objectstyle.wolips.eomodeler.core.model.EOModelGroup; import org.objectstyle.wolips.eomodeler.core.model.EOModelVerificationFailure; import org.objectstyle.wolips.eomodeler.core.model.IEOModelGroupFactory; import org.objectstyle.wolips.eomodeler.editors.EOModelErrorDialog; import entitymodeler.ApplicationWorkbenchAdvisor; public class NewEOModelAction extends Action implements ActionFactory.IWorkbenchAction { private IWorkbenchWindow _window; public NewEOModelAction(IWorkbenchWindow window) { _window = window; setText("&New"); setAccelerator(SWT.COMMAND | 'N'); } public void dispose() { // DO NOTHING } @Override public void run() { DirectoryDialog directoryDialog = new DirectoryDialog(_window.getShell()); directoryDialog.setMessage("Select the directory that will contain this EOModel."); String modelContainerPath = directoryDialog.open(); if (modelContainerPath == null) { // close } else { InputDialog modelNameDialog = new InputDialog(_window.getShell(), "New EOModel", "Enter the name of the new EOModel.", "My EOModel", new ModelNameInputValidator()); int results = modelNameDialog.open(); if (results == InputDialog.CANCEL) { // close } else { String modelName = modelNameDialog.getValue(); Set<EOModelVerificationFailure> failures = new HashSet<EOModelVerificationFailure>(); //IContainer parentContainer = (IContainer) _parentResource; File modelFolder = new File(modelContainerPath, modelName + ".eomodeld"); if (modelFolder.exists()) { failures.add(new EOModelVerificationFailure(null, "There's already a model in " + modelFolder + ".", true, null)); EOModelErrorDialog errors = new EOModelErrorDialog(Display.getDefault().getActiveShell(), failures); errors.open(); return; } EOModelGroup modelGroup = new EOModelGroup(); try { IEOModelGroupFactory.Utility.loadModelGroup(modelFolder, modelGroup, failures, true, modelFolder.toURI().toURL(), new NullProgressMonitor()); } catch (Exception e) { failures.clear(); failures.add(new EOModelVerificationFailure(null, "Creating empty EOModelGroup for this model because " + e.getMessage(), true, e)); modelGroup = new EOModelGroup(); EOModelErrorDialog errors = new EOModelErrorDialog(Display.getDefault().getActiveShell(), failures); errors.open(); } try { EOModel model = new EOModel(modelName); modelGroup.addModel(model); //model.setEditing(true); EODatabaseConfig databaseConfig = new EODatabaseConfig("Default"); databaseConfig.setAdaptorName("JDBC"); model.setModelURL(modelFolder.toURI().toURL()); model.addDatabaseConfig(databaseConfig); model.saveToFolder(modelFolder); ApplicationWorkbenchAdvisor.openModelPath(modelFolder.getAbsolutePath()); } catch (Throwable t) { t.printStackTrace(); } } } } protected static class ModelNameInputValidator implements IInputValidator { public String isValid(String newText) { return null; } } }