package org.kie.eclipse.navigator.view.actions.dialogs; import java.net.URI; import java.net.URISyntaxException; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.kie.eclipse.navigator.Activator; import org.kie.eclipse.server.IKieOrganizationHandler; import org.kie.eclipse.server.IKieRepositoryHandler; import com.eclipsesource.json.JsonObject; import com.eclipsesource.json.JsonValue; public class CreateRepositoryRequestDialog extends AbstractKieRequestDialog { IKieOrganizationHandler organization; KieRequestDialogTextField name; KieRequestDialogTextField description; KieRequestDialogTextField userName; KieRequestDialogPasswordField password; KieRequestDialogSelectionField requestType; KieRequestDialogTextField gitURL; public CreateRepositoryRequestDialog(Shell shell, final IKieOrganizationHandler organization) { super(shell, "Repository", new IKieRequestValidator() { @Override public String isValid(JsonObject object) { JsonValue jv; jv = object.get("name"); String name = jv==null ? null : jv.asString().trim(); jv = object.get("gitURL"); String gitURL = jv==null ? null : jv.asString().trim(); if (name!=null && !name.isEmpty()) { try { for (IKieRepositoryHandler rep : organization.getRepositories()) { if (rep.getName().equals(name)) return "Repository '"+name+"' already exists in this Organizational Unit"; } } catch (Exception e) { } } else { return "Name is required"; } if (gitURL==null || gitURL.isEmpty()) { jv = object.get("requestType"); if (jv!=null && "clone".equals(jv.asString())) { return "Git URL of origin is required"; } } else { try { new URI(gitURL); } catch (URISyntaxException e) { return "Git URL is invalid"; } } return null; } }); setTitleImage(Activator.getImage("icons/wizban/repository.png")); this.organization = organization; } @Override protected void createFields(Composite composite) { setMessage("Enter the Repository details"); name = new KieRequestDialogTextField(composite, "Name:", "", properties, "name"); name.setChangeListener(new IKieRequestChangeListener() { @Override public void objectChanged(JsonObject object) { validate(); } }); description = new KieRequestDialogTextField(composite, "Description:", "", properties, "description"); userName = new KieRequestDialogTextField(composite, "Username:", "", properties, "userName"); password = new KieRequestDialogPasswordField(composite, "Password:", "", properties, "password"); requestType = new KieRequestDialogSelectionField(composite, "Request Type:", new String[] {"Create New Repository", "Clone an existing Repository"}, new String[] {"new", "clone"}, SWT.RADIO, properties, "requestType" ); // "requestType" is a required field, initialize to "new" properties.set("requestType", "new"); gitURL = new KieRequestDialogTextField(composite, "URL of a Repository to clone:", "", properties, "gitURL"); gitURL.getControl().setEnabled(false); gitURL.setChangeListener(new IKieRequestChangeListener() { @Override public void objectChanged(JsonObject object) { validate(); } }); requestType.setChangeListener(new IKieRequestChangeListener() { @Override public void objectChanged(JsonObject object) { JsonValue jv = object.get("requestType"); if (jv!=null) { gitURL.getControl().setEnabled("clone".equals(jv.asString())); } validate(); } }); } @Override public JsonObject getResult() { // append the Organization Unit name field since this will not change properties.set("organizationalUnitName", organization.getName()); return super.getResult(); } }