/*
* RapidMiner
*
* Copyright (C) 2001-2011 by Rapid-I and the contributors
*
* Complete list of developers available at our web site:
*
* http://rapid-i.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package com.rapidminer.gui.processeditor;
import java.awt.Color;
import java.awt.GridLayout;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import com.rapidminer.Process;
import com.rapidminer.ProcessContext;
import com.rapidminer.operator.ports.InputPorts;
import com.rapidminer.operator.ports.OutputPorts;
import com.rapidminer.repository.gui.RunRemoteDialog;
/** <p>An editor to editor {@link ProcessContext}s. This is used in the {@link RunRemoteDialog} and
* in the {@link ProcessContextProcessEditor}.</p>
*
* <p>
* The editor keeps a reference to the edited {@link Process} and a {@link ProcessContext}.
* Typically, the context will be the one provided by the process itself. Passing null
* to one of the methods expecting a context will automatically use the one provided by
* the process. However, if you want to edit a context that you want to superimpose on the
* processes context later, you can pass in an alternative context.
* </p>
*
* @author Simon Fischer, Tobias Malbrecht
*
*/
public class ProcessContextEditor extends JPanel {
private static final long serialVersionUID = 1L;
private final RepositoryLocationsEditor<OutputPorts> inputEditor;
private final RepositoryLocationsEditor<InputPorts> outputEditor;
private final MacroEditor macroEditor;
/** Constructs an editor for the given process and edited context. See class comment to find out why you can pass in
* a context here. */
public ProcessContextEditor(Process process, ProcessContext alternativeContext) {
inputEditor = new RepositoryLocationsEditor<OutputPorts>(true, "context.input", "input");
outputEditor = new RepositoryLocationsEditor<InputPorts>(false, "context.output", "result");
macroEditor = new MacroEditor(true);
setLayout(new GridLayout(3, 1));
((GridLayout) getLayout()).setHgap(0);
((GridLayout) getLayout()).setVgap(10);
inputEditor.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.LIGHT_GRAY));
outputEditor.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.LIGHT_GRAY));
add(inputEditor);
add(outputEditor);
add(macroEditor);
setProcess(process, alternativeContext);
}
/** Sets the process and edited context. See class comment to find out why you can pass in
* a context here. */
protected void setProcess(Process process, ProcessContext context) {
if (context == null) {
context = process != null ? process.getContext() : null;
}
macroEditor.setContext(context);
if (context != null) {
inputEditor.setData(context, process, process.getRootOperator().getSubprocess(0).getInnerSources());
outputEditor.setData(context, process, process.getRootOperator().getSubprocess(0).getInnerSinks());
}
}
}