Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
org.kie.eclipse.preferences.AbstractRuntimeDialog Maven / Gradle / Ivy
/*
* Copyright 2010 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.kie.eclipse.preferences;
import java.io.File;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.StringConverter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.DirectoryDialog;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Widget;
import org.kie.eclipse.runtime.AbstractRuntime;
import org.kie.eclipse.runtime.IRuntime;
import org.kie.eclipse.runtime.IRuntimeManager;
public abstract class AbstractRuntimeDialog extends Dialog {
private IRuntime runtime;
private Text nameText;
private Text pathText;
private Text versionText;
private Text errorMessageText;
private List runtimes;
private boolean editMode;
private Listener textModifyListener = new Listener() {
public void handleEvent(Event e) {
validate(e.widget);
}
};
public AbstractRuntimeDialog(Shell parent, List runtimes) {
super(parent);
setBlockOnOpen(true);
this.runtimes = runtimes;
runtime = getRuntimeManager().createNewRuntime();
setShellStyle(getShellStyle() | SWT.RESIZE);
}
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
composite.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true, 1, 1));
composite.setLayout(new GridLayout(3, false));
Label nameLabel = new Label(composite, SWT.NONE);
nameLabel.setText("Name:");
nameLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false, 1, 1));
nameText = new Text(composite, SWT.SINGLE | SWT.BORDER);
nameText.setText(editMode ? runtime.getName() : "");
nameText.addListener(SWT.Modify, textModifyListener);
nameText.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1));
Label pathLabel = new Label(composite, SWT.NONE);
pathLabel.setText("Path:");
pathLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false, 1, 1));
pathText = new Text(composite, SWT.SINGLE | SWT.BORDER);
pathText.setText(editMode ? runtime.getPath() : "");
pathText.addListener(SWT.Modify, textModifyListener);
pathText.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 1, 1));
Button selectButton = new Button(composite, SWT.PUSH | SWT.LEFT);
selectButton.setText("Browse...");
selectButton.setLayoutData(new GridData(GridData.BEGINNING, GridData.CENTER, false, false, 1, 1));
selectButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
browse();
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
Label versionLabel = new Label(composite, SWT.NONE);
versionLabel.setText("Version:");
versionLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false, 1, 1));
versionText = new Text(composite, SWT.SINGLE | SWT.BORDER);
versionText.setText(editMode ? runtime.getVersion().toString() : "");
versionText.addListener(SWT.Modify, textModifyListener);
versionText.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2, 1));
errorMessageText = new Text(composite, SWT.READ_ONLY | SWT.WRAP);
errorMessageText.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 3, 1));
errorMessageText.setBackground(errorMessageText.getDisplay()
.getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
validate(null);
return composite;
}
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
getButton(IDialogConstants.OK_ID).setEnabled(false);
}
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
if (editMode)
newShell.setText("Edit Runtime");
else
newShell.setText("Add Runtime");
}
protected Point getInitialSize() {
Point p = super.getInitialSize();
// p.y += p.y/10;
return new Point(500,p.y);
}
public void setRuntime(IRuntime runtime) {
if (runtime!=null) {
this.runtime = runtime;
editMode = true;
}
}
private void validate(Widget widget) {
setErrorMessage(null);
if (widget==nameText || widget==null) {
String name = nameText.getText();
if (name == null || "".equals(name.trim())) {
setErrorMessage("Name is required");
return;
}
if (!name.equals(runtime.getName())) {
for (IRuntime runtime : runtimes) {
if (name.equals(runtime.getName())) {
setErrorMessage("The Runtime \"" + name + "\" is already registered");
return;
}
}
}
}
if (widget==pathText || widget==null) {
String location = pathText.getText();
if (location != null && !location.isEmpty()) {
File file = new File(location);
if (!file.exists() || !file.isDirectory()) {
setErrorMessage("Path does not exist or is not a directory");
return;
}
IRuntime r = getRuntimeManager().createNewRuntime();
r.setVersion(null);
r.setPath(location);
getRuntimeManager().recognizeJars(r);
int jarCount = r.getJars()==null ? 0 : r.getJars().length;
if (jarCount>0) {
if (versionText.getText().isEmpty()) {
versionText.setText(r.getVersion().toString());
widget = versionText;
}
if (nameText.getText().isEmpty()) {
nameText.setText(r.getName() + " " + r.getVersion().toString());
validate(nameText);
}
if (editMode)
r.setVersion(runtime.getVersion().toString());
runtime = r;
}
else {
setErrorMessage("The given Path does not contain any " + r.getName() + " Runtime jars");
}
} else {
setErrorMessage("Path is required");
return;
}
}
if (widget==versionText || widget==null) {
String version = versionText.getText();
String error = AbstractRuntime.Version.validate(version);
if (error!=null)
setErrorMessage(error);
}
}
private void browse() {
String selectedDirectory = null;
String dirName = pathText.getText();
DirectoryDialog dialog = new DirectoryDialog(getShell());
dialog.setMessage("Select the Runtime directory.");
dialog.setFilterPath(dirName);
selectedDirectory = dialog.open();
if (selectedDirectory != null) {
pathText.setText(selectedDirectory);
}
}
public IRuntime getResult() {
return runtime;
}
@Override
protected void buttonPressed(int buttonId) {
if (buttonId == IDialogConstants.OK_ID) {
runtime.setName(nameText.getText());
runtime.setPath(pathText.getText());
if (runtime.getJars()==null || runtime.getJars().length==0) {
getRuntimeManager().recognizeJars(runtime);
if (runtime.getJars()==null || runtime.getJars().length==0) {
MessageDialog.openError(getShell(), "Invalid Runtime Directory",
"No Runtime was found in the specified path "+pathText.getText());
return;
}
}
runtime.setVersion(versionText.getText());
} else {
runtime = null;
}
super.buttonPressed(buttonId);
}
public void setErrorMessage(String errorMessage) {
if (errorMessageText != null && !errorMessageText.isDisposed()) {
errorMessageText.setText(errorMessage == null ? " \n " : errorMessage); //$NON-NLS-1$
// Disable the error message text control if there is no error, or
// no error text (empty or whitespace only). Hide it also to avoid
// color change.
// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=130281
boolean hasError = errorMessage != null && (StringConverter.removeWhiteSpaces(errorMessage)).length() > 0;
errorMessageText.setEnabled(hasError);
errorMessageText.setVisible(hasError);
errorMessageText.getParent().layout();
errorMessageText.getParent().update();
// Access the ok button by id, in case clients have overridden button creation.
// See https://bugs.eclipse.org/bugs/show_bug.cgi?id=113643
Control button = getButton(IDialogConstants.OK_ID);
if (button != null) {
button.setEnabled(errorMessage == null);
}
}
}
abstract protected IRuntimeManager getRuntimeManager();
}