/*
* (c) Rob Gordon 2005.
*/
package org.oddjob.values.properties;
import org.oddjob.arooa.design.DesignFactory;
import org.oddjob.arooa.design.DesignInstance;
import org.oddjob.arooa.design.DesignProperty;
import org.oddjob.arooa.design.DesignValueBase;
import org.oddjob.arooa.design.IndexedDesignProperty;
import org.oddjob.arooa.design.MappedDesignProperty;
import org.oddjob.arooa.design.SimpleDesignProperty;
import org.oddjob.arooa.design.SimpleTextAttribute;
import org.oddjob.arooa.design.screem.FieldGroup;
import org.oddjob.arooa.design.screem.Form;
import org.oddjob.arooa.design.screem.FormItem;
import org.oddjob.arooa.design.screem.StandardForm;
import org.oddjob.arooa.design.screem.TabGroup;
import org.oddjob.arooa.parsing.ArooaContext;
import org.oddjob.arooa.parsing.ArooaElement;
import org.oddjob.designer.components.BaseDC;
/**
*
*/
public class PropertiesDesFa implements DesignFactory {
public DesignInstance createDesign(ArooaElement element,
ArooaContext parentContext) {
switch (parentContext.getArooaType()) {
case COMPONENT:
return new PropertiesJobDesign(element, parentContext);
case VALUE:
return new PropertiesTypeDesign(element, parentContext);
}
throw new IllegalStateException("Unknown Type.");
}
}
class PropertiesJobDesign extends BaseDC {
final private PropertiesDesign delegate;
private final SimpleTextAttribute override;
private final SimpleTextAttribute environment;
private final SimpleTextAttribute system;
public PropertiesJobDesign(ArooaElement element, ArooaContext parentContext) {
super(element, parentContext);
override = new SimpleTextAttribute("override", this);
environment = new SimpleTextAttribute("environment", this);
system = new SimpleTextAttribute("system", this);
this.delegate = new PropertiesDesign(element, parentContext, this);
}
@Override
public Form detail() {
FormItem detail = delegate.detail();
return new StandardForm(this)
.addFormItem(basePanel())
.addFormItem(new FieldGroup()
.add(override.view().setTitle("Override"))
.add(environment.view().setTitle("Environment"))
.add(system.view().setTitle("System"))
)
.addFormItem(detail);
}
@Override
public DesignProperty[] children() {
DesignProperty[] delegates = delegate.children();
DesignProperty[] all = new DesignProperty[delegates.length + 4];
all[0] = name;
all[1] = override;
all[2] = environment;
all[3] = system;
System.arraycopy(delegates, 0, all, 4, delegates.length);
return all;
}
}
class PropertiesTypeDesign extends DesignValueBase {
final private PropertiesDesign delegate;
public PropertiesTypeDesign(ArooaElement element, ArooaContext parentContext) {
super(element, parentContext);
this.delegate = new PropertiesDesign(element, parentContext, this);
}
@Override
public Form detail() {
FormItem detail = delegate.detail();
return new StandardForm(this).addFormItem(
detail);
}
@Override
public DesignProperty[] children() {
return delegate.children();
}
}
/**
* Shared between the Properties Job and Type.
*
*/
class PropertiesDesign {
private final MappedDesignProperty values;
private final IndexedDesignProperty sets;
private final SimpleTextAttribute fromXML;
private final SimpleTextAttribute substitute;
private final SimpleDesignProperty input;
private final SimpleTextAttribute extract;
private final SimpleTextAttribute prefix;
public PropertiesDesign(ArooaElement element, ArooaContext parentContext,
DesignInstance owner) {
values = new MappedDesignProperty(
"values", owner);
sets = new IndexedDesignProperty(
"sets", owner);
substitute = new SimpleTextAttribute(
"substitute", owner);
fromXML = new SimpleTextAttribute(
"fromXML", owner);
input = new SimpleDesignProperty(
"input", owner);
extract = new SimpleTextAttribute("extract", owner);
prefix = new SimpleTextAttribute("prefix", owner);
}
FormItem detail() {
return
new TabGroup("Properties")
.add(values.view().setTitle("Values")
)
.add(sets.view().setTitle("Sets")
)
.add(new FieldGroup("Input")
.add(input.view().setTitle("Input"))
.add(fromXML.view().setTitle("From XML"))
)
.add(new FieldGroup("Advanced")
.add(substitute.view().setTitle("Substitute"))
.add(extract.view().setTitle("Extract Prefix"))
.add(prefix.view().setTitle("Prepend Prefix"))
);
}
public DesignProperty[] children() {
return new DesignProperty[] {
extract,
prefix,
values,
sets,
fromXML,
substitute,
input};
}
}