package org.kie.eclipse.navigator.view.actions.repository;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.window.Window;
import org.kie.eclipse.navigator.view.actions.KieNavigatorAction;
import org.kie.eclipse.navigator.view.actions.dialogs.CreateProjectRequestDialog;
import org.kie.eclipse.navigator.view.content.ContentNode;
import org.kie.eclipse.navigator.view.content.IContainerNode;
import org.kie.eclipse.navigator.view.content.ProjectNode;
import org.kie.eclipse.navigator.view.content.RepositoryNode;
import org.kie.eclipse.navigator.view.utils.ActionUtils;
import org.kie.eclipse.server.IKieProjectHandler;
import org.kie.eclipse.server.IKieRepositoryHandler;
import org.kie.eclipse.server.IKieServiceDelegate;
import org.kie.eclipse.server.KieProjectHandler;
import org.kie.eclipse.server.KieRepositoryHandler;
import org.kie.eclipse.utils.FileUtils;
import com.eclipsesource.json.JsonObject;
import com.eclipsesource.json.JsonValue;
public class CreateProjectAction extends KieNavigatorAction {
protected CreateProjectAction(ISelectionProvider provider, String text) {
super(provider, text);
}
public CreateProjectAction(ISelectionProvider selectionProvider) {
this(selectionProvider, "Create Project...");
}
@Override
public String getToolTipText() {
return "Create a new Project";
}
@Override
public boolean isEnabled() {
IContainerNode<?> container = getContainer();
if (container instanceof ContentNode) {
KieRepositoryHandler handler = (KieRepositoryHandler) ((ContentNode) container).getHandler();
if (handler == null || !handler.isLoaded())
return false;
}
return true;
}
public void run() {
IContainerNode<?> container = getContainer();
if (container==null)
return;
IKieRepositoryHandler repository = (IKieRepositoryHandler) container.getHandler();
IKieServiceDelegate delegate = getDelegate();
CreateProjectRequestDialog dlg = new CreateProjectRequestDialog(getShell(), repository);
if (dlg.open()==Window.OK) {
JsonObject properties = dlg.getResult();
String name = properties.get("name").asString().trim();
IKieProjectHandler project = new KieProjectHandler(repository, name);
project.setProperties(properties);
try {
delegate.createProject(project);
ActionUtils.pullRepository(this, (RepositoryNode) container);
ProjectNode projectNode = null;
if (dlg.shouldImportProject()) {
container.clearChildren();
container.load();
for (Object child : container.getChildren()) {
if (child instanceof ProjectNode) {
if (project.getName().equals(((ProjectNode)child).getName())) {
projectNode = (ProjectNode) child;
break;
}
}
}
if (projectNode==null) {
MessageDialog.openError(getShell(), "Error", "The Project '"+project.getName()+"' is not found!");
return;
}
IJavaProject javaProject = ActionUtils.importProject(projectNode, this);
if (javaProject!=null) {
FileUtils.createGitIgnore(javaProject, null);
}
// TODO: re-think this, because server already creates some of these
// artifacts, e.g. pom.xml kmodule.xml and deployment-descriptor.xml
// if (javaProject!=null && dlg.shouldCreateArtifacts()) {
// String artifactId = dlg.getArtifactId();
//
// JsonObject projectProperties = projectNode.getHandler().getProperties();
// JsonValue jv = projectProperties.get("groupId");
// String groupId = null;
// if (jv==null || jv.asString().isEmpty()) {
// if (projectNode.getParent() instanceof RepositoryNode) {
// JsonObject orgProperties = projectNode.getParent().getParent().getHandler().getProperties();
// jv = orgProperties.get("defaultGroupId");
// }
// }
// if (jv!=null)
// groupId = jv.asString();
//
// String version = null;
// jv = projectProperties.get("version");
// if (jv!=null)
// version = jv.asString();
//
// ActionUtils.createProjectArtifacts(javaProject, groupId, artifactId, version, null);
// }
}
container.refresh();
}
catch (Exception e) {
handleException(e);
}
}
}
}