diff -r 0b02f3d6f52c -r 87920e15f8eb org.symbian.tools.mtw.ui/src/org/symbian/tools/tmw/internal/ui/wizard/WizardContext.java --- a/org.symbian.tools.mtw.ui/src/org/symbian/tools/tmw/internal/ui/wizard/WizardContext.java Fri Aug 13 17:26:00 2010 -0700 +++ b/org.symbian.tools.mtw.ui/src/org/symbian/tools/tmw/internal/ui/wizard/WizardContext.java Mon Aug 16 16:23:25 2010 -0700 @@ -13,7 +13,9 @@ import org.eclipse.core.databinding.beans.BeansObservables; import org.eclipse.core.databinding.observable.Observables; import org.eclipse.core.databinding.observable.map.IObservableMap; +import org.eclipse.core.databinding.observable.value.AbstractObservableValue; import org.eclipse.core.databinding.observable.value.IObservableValue; +import org.eclipse.core.databinding.observable.value.ValueDiff; import org.eclipse.core.databinding.validation.IValidator; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; @@ -39,31 +41,23 @@ import org.symbian.tools.tmw.ui.project.IProjectTemplateContext; public class WizardContext implements IProjectTemplateContext { - // public static final String CSS_FILE = "cssFile"; - // public static final String HTML_FILE = "htmlFile"; - // public static final String JS_FILE = "jsFile"; + public static final String PROJECT_NAME = "projectName"; + public static final String RUNTIME = "runtime"; public static final String TEMPLATE = "template"; + public static final String TEMPLATES = "templates"; public static final String WIDGET_ID = "widgetId"; public static final String WIDGET_NAME = "widgetName"; - // public static final String HOME_SCREEN = "homeScreen"; - public static final String RUNTIME = "runtime"; - // public static final String LIBRARIES = "libraries"; - public static final String PROJECT_NAME = "projectName"; - public static final String TEMPLATES = "templates"; - // private String cssFile; + private final Map extensions = new TreeMap(); + private final Map observables = new TreeMap(); private String projectName = ""; - // private String htmlFile; - // private String jsFile; private final PropertyChangeSupport propertySupport = new PropertyChangeSupport(this); + private IMobileWebRuntime runtime; private IProjectTemplate template = null; + private String widgetId; + private String widgetName; - private Map extensions = new TreeMap(); - // private boolean homeScreen; - private IMobileWebRuntime runtime; - - // private Set libraries = new HashSet(); public WizardContext() { IMobileWebRuntime[] runtimes = TMWCore.getRuntimesManager().getAllRuntimes(); @@ -72,6 +66,17 @@ } } + public void addFile(IProject project, IPath name, InputStream contents, IProgressMonitor monitor) + throws CoreException { + monitor.beginTask(name.toOSString(), 100); + final IFile file = project.getFile(name); + if (!file.exists()) { + create(file.getParent()); + } + file.create(contents, false, new SubProgressMonitor(monitor, 100)); + monitor.done(); + } + public void addPropertyChangeListener(PropertyChangeListener arg0) { propertySupport.addPropertyChangeListener(arg0); } @@ -80,10 +85,146 @@ propertySupport.addPropertyChangeListener(arg0, arg1); } + private void create(IContainer parent) throws CoreException { + if (!parent.exists() && parent instanceof IFolder) { + create(parent.getParent()); + ((IFolder) parent).create(false, true, new NullProgressMonitor()); + } + } + + protected void createLabel(Composite root, String text) { + Label label = new Label(root, SWT.NONE); + label.setText(text); + } + + private Text createText(Composite root, IObservableValue model, String propertyName, + DataBindingContext bindingContext, AbstractDataBindingPage page, IValidator... validators) { + Text text = new Text(root, SWT.BORDER); + text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + ISWTObservableValue view = SWTObservables.observeText(text, SWT.Modify); + UpdateValueStrategy strategy = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE); + NonEmptyStringValidator validator = new NonEmptyStringValidator(propertyName, page); + strategy.setBeforeSetValidator(validators.length == 0 ? validator + : new CompoundValidator(validator, validators)); + bindingContext.bindValue(view, model, strategy, null); + return text; + } + + protected Text createText(Composite root, String property, String propertyName, DataBindingContext bindingContext, + AbstractDataBindingPage page, IValidator... validators) { + return createText(root, BeansObservables.observeValue(this, property), propertyName, bindingContext, page, + validators); + } + + protected Text createTextForExt(Composite root, String property, String propertyName, + DataBindingContext bindingContext, AbstractDataBindingPage page) { + IObservableMap map = BeansObservables.observeMap(this, "extensions"); + IObservableValue entry = Observables.observeMapEntry(map, property, String.class); + return createText(root, entry, propertyName, bindingContext, page); + } + + private IProjectTemplate getDefaultTemplate(IMobileWebRuntime runtime) { + return TMWCoreUI.getProjectTemplateManager().getDefaultTemplate(runtime); + } + + private String getDefaultWidgetId() { + String name = Util.removeSpaces(getWidgetName()); + return MessageFormat.format("com.company.{0}", name.length() > 0 ? name : "ApplicationName"); + } + + public Map getExtensions() { + return extensions; + } + + public Object getParameter(String parameter) { + return getTemplateVars().get(parameter); + } + + public String[] getParameterNames() { + Set keys = getTemplateVars().keySet(); + return keys.toArray(new String[keys.size()]); + } + + public IObservableValue getParameterObservable(String name) { + IObservableValue value = observables.get(name); + if (value == null) { + value = new ObservableParameter(name); + observables.put(name, value); + } + return value; + } + public String getProjectName() { return projectName; } + public IMobileWebRuntime getRuntime() { + return runtime; + } + + public IProjectTemplate getTemplate() { + if (template == null) { + return getDefaultTemplate(getRuntime()); + } + return template; + } + + public IProjectTemplate[] getTemplates() { + return TMWCoreUI.getProjectTemplateManager().getProjectTemplates(getRuntime()); + } + + private Map getTemplateVars() { + Map vars = new TreeMap(); + + if (runtime != null) { + vars.putAll(TMWCoreUI.getProjectTemplateManager().getDefaultTemplateParameterValues(runtime)); + } + final IProjectTemplate t = getTemplate(); + if (t != null) { + vars.putAll(t.getDefaultParameterValues()); + } + + vars.put("widgetName", getWidgetName()); + vars.put("widgetId", getWidgetId()); + vars.putAll(extensions); + + return vars; + } + + public String getWidgetId() { + if (widgetId == null) { + return getDefaultWidgetId(); + } + return widgetId; + } + + public String getWidgetName() { + return widgetName == null ? getProjectName() : widgetName; + } + + public void initialize(IProject project, IProgressMonitor monitor) { + final IProjectTemplate template = getTemplate(); + if (template != null) { + template.init(project, this, monitor); + } + } + + public void putParameter(String key, Object value) { + if (value != null) { + extensions.put(key, value); + } else { + extensions.remove(key); + } + } + + public void removePropertyChangeListener(PropertyChangeListener arg0) { + propertySupport.removePropertyChangeListener(arg0); + } + + public void removePropertyChangeListener(String arg0, PropertyChangeListener arg1) { + propertySupport.removePropertyChangeListener(arg0, arg1); + } + public void setProjectName(String projectName) { String prev = getProjectName(); String prevId = getWidgetId(); @@ -98,115 +239,27 @@ } } - // public String getCssFile() { - // if (cssFile == null) { - // if (template != null) { - // return template.getDefaultCssFile(); - // } - // } - // return cssFile; - // } - // - private String getDefaultWidgetId() { - String name = Util.removeSpaces(getWidgetName()); - return MessageFormat.format("com.company.{0}", name.length() > 0 ? name : "ApplicationName"); - } - - // - // public String getHtmlFile() { - // if (htmlFile == null) { - // if (template != null) { - // return template.getDefaultHtmlFile(); - // } - // } - // return htmlFile; - // } - // - // public String getJsFile() { - // if (jsFile == null) { - // if (template != null) { - // return template.getDefaultJsFile(); - // } - // } - // return jsFile; - // } - - public IProjectTemplate getTemplate() { + public void setRuntime(IMobileWebRuntime runtime) { + final IProjectTemplate[] prevTemplates = getTemplates(); + final IProjectTemplate prevTemplate; if (template == null) { - return getDefaultTemplate(getRuntime()); + prevTemplate = getTemplate(); + } else { + prevTemplate = null; } - return template; - } - - private IProjectTemplate getDefaultTemplate(IMobileWebRuntime runtime) { - return TMWCoreUI.getProjectTemplateManager().getDefaultTemplate(runtime); + final IMobileWebRuntime prev = this.runtime; + this.runtime = runtime; + propertySupport.firePropertyChange(RUNTIME, prev, runtime); + propertySupport.firePropertyChange(TEMPLATES, prevTemplates, getTemplates()); + if (prevTemplate == null) { + propertySupport.firePropertyChange(TEMPLATE, prevTemplate, getTemplate()); + } } - public String getWidgetId() { - if (widgetId == null) { - return getDefaultWidgetId(); - } - return widgetId; - } - - public String getWidgetName() { - return widgetName == null ? getProjectName() : widgetName; - } - - public void removePropertyChangeListener(PropertyChangeListener arg0) { - propertySupport.removePropertyChangeListener(arg0); - } - - public void removePropertyChangeListener(String arg0, PropertyChangeListener arg1) { - propertySupport.removePropertyChangeListener(arg0, arg1); - } - - // public void setCssFile(String cssFile) { - // if (template != null && template.getDefaultCssFile().equals(cssFile)) { - // cssFile = null; - // } - // String prev = this.cssFile; - // this.cssFile = cssFile; - // propertySupport.firePropertyChange(CSS_FILE, cssFile, prev); - // } - // - // public void setHtmlFile(String htmlFile) { - // if (template != null && template.getDefaultHtmlFile().equals(htmlFile)) { - // htmlFile = null; - // } - // String prev = this.htmlFile; - // this.htmlFile = htmlFile; - // propertySupport.firePropertyChange(HTML_FILE, htmlFile, prev); - // } - // - // public void setJsFile(String jsFile) { - // if (template != null && template.getDefaultJsFile().equals(jsFile)) { - // jsFile = null; - // } - // String prev = this.jsFile; - // this.jsFile = jsFile; - // propertySupport.firePropertyChange(JS_FILE, jsFile, prev); - // } - // public void setTemplate(IProjectTemplate template) { - // String html = getHtmlFile(); - // String js = getJsFile(); - // String css = getCssFile(); IProjectTemplate prev = this.template; this.template = template; propertySupport.firePropertyChange(TEMPLATE, template, prev); - // if (htmlFile == null) { - // propertySupport.firePropertyChange(HTML_FILE, getHtmlFile(), html); - // } - // if (jsFile == null) { - // propertySupport.firePropertyChange(JS_FILE, getJsFile(), js); - // } - // if (cssFile == null) { - // propertySupport.firePropertyChange(CSS_FILE, getCssFile(), css); - // } - // if (cssFile == null) { - // propertySupport.firePropertyChange(LIBRARIES, getLibraries(), libraries); - // } } public void setWidgetId(String widgetId) { @@ -232,184 +285,38 @@ } } - public void setExtensions(Map extensions) { - this.extensions = extensions; - } + private final class ObservableParameter extends AbstractObservableValue { + private final String name; - public Map getExtensions() { - return extensions; - } + public ObservableParameter(String name) { + this.name = name; + } - private Map getTemplateVars() { - Map vars = new TreeMap(); + public Object getValueType() { + return Object.class; + } - if (runtime != null) { - vars.putAll(TMWCoreUI.getProjectTemplateManager().getDefaultTemplateParameterValues(runtime)); - } - final IProjectTemplate t = getTemplate(); - if (t != null) { - vars.putAll(t.getDefaultParameterValues()); + @Override + protected Object doGetValue() { + return getParameter(name); } - vars.put("widgetName", getWidgetName()); - vars.put("widgetId", getWidgetId()); - // vars.put("mainHtml", getHtmlFileName()); - // vars.put("mainCss", getCssFileName()); - // vars.put("mainJs", getJsFileName()); - // vars.put("homeScreen", String.valueOf(isHomeScreen())); - vars.putAll(extensions); - - return vars; - } - - // - // public boolean isHomeScreen() { - // return homeScreen; - // } - - // public void setHomeScreen(boolean homeScreen) { - // boolean old = homeScreen; - // this.homeScreen = homeScreen; - // propertySupport.firePropertyChange(HOME_SCREEN, old, homeScreen); - // } - - // public String getHtmlFileName() { - // return stripExtension(getHtmlFile(), "htm", "html"); - // } - // - // public String getJsFileName() { - // return stripExtension(getJsFile(), "js"); - // } - // - // public String getCssFileName() { - // return stripExtension(getCssFile(), "css"); - // } - - // private String stripExtension(String fileName, String... extensions) { - // for (String extension : extensions) { - // String extensionAndDot = "." + extension; - // if (fileName.endsWith(extensionAndDot)) { - // return fileName.substring(0, fileName.length() - extensionAndDot.length()); - // } - // } - // return fileName; - // } - - // public boolean isRequiredLibrary(JSLibrary element) { - // return template != null && template.requires(element); - // } - // - // public Set getLibraries() { - // final Set set = new HashSet(libraries); - // if (template != null) { - // set.addAll(Arrays.asList(template.getRequiredLibraries())); - // } - // return set; - // } - - // public void setLibraries(Set libraries) { - // Set prev = this.libraries; - // this.libraries = libraries; - // propertySupport.firePropertyChange(LIBRARIES, prev, libraries); - // } - - // public Map getLibraryParameters(JSLibrary library) { - // return Collections.emptyMap(); - // } - - protected Text createText(Composite root, String property, String propertyName, DataBindingContext bindingContext, - AbstractDataBindingPage page, IValidator... validators) { - return createText(root, BeansObservables.observeValue(this, property), propertyName, bindingContext, page, - validators); - } - - protected Text createTextForExt(Composite root, String property, String propertyName, - DataBindingContext bindingContext, AbstractDataBindingPage page) { - IObservableMap map = BeansObservables.observeMap(this, "extensions"); - IObservableValue entry = Observables.observeMapEntry(map, property, String.class); - return createText(root, entry, propertyName, bindingContext, page); - } + @Override + protected void doSetValue(final Object value) { + final Object prev = getParameter(name); + putParameter(name, value); + fireValueChange(new ValueDiff() { - private Text createText(Composite root, IObservableValue model, String propertyName, - DataBindingContext bindingContext, AbstractDataBindingPage page, IValidator... validators) { - Text text = new Text(root, SWT.BORDER); - text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - ISWTObservableValue view = SWTObservables.observeText(text, SWT.Modify); - UpdateValueStrategy strategy = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE); - NonEmptyStringValidator validator = new NonEmptyStringValidator(propertyName, page); - strategy.setBeforeSetValidator(validators.length == 0 ? validator - : new CompoundValidator(validator, validators)); - bindingContext.bindValue(view, model, strategy, null); - return text; - } - - protected void createLabel(Composite root, String text) { - Label label = new Label(root, SWT.NONE); - label.setText(text); - } - - public void setRuntime(IMobileWebRuntime runtime) { - final IProjectTemplate[] prevTemplates = getTemplates(); - final IProjectTemplate prevTemplate; - if (template == null) { - prevTemplate = getTemplate(); - } else { - prevTemplate = null; - } - final IMobileWebRuntime prev = this.runtime; - this.runtime = runtime; - propertySupport.firePropertyChange(RUNTIME, prev, runtime); - propertySupport.firePropertyChange(TEMPLATES, prevTemplates, getTemplates()); - if (prevTemplate == null) { - propertySupport.firePropertyChange(TEMPLATE, prevTemplate, getTemplate()); - } - } - - public IMobileWebRuntime getRuntime() { - return runtime; - } + @Override + public Object getOldValue() { + return prev; + } - public IProjectTemplate[] getTemplates() { - return TMWCoreUI.getProjectTemplateManager().getProjectTemplates(getRuntime()); - } - - public void initialize(IProject project, IProgressMonitor monitor) { - final IProjectTemplate template = getTemplate(); - if (template != null) { - template.init(project, this, monitor); - } - } - - public Object getParameter(String parameter) { - return getTemplateVars().get(parameter); - } - - public String[] getParameterNames() { - Set keys = getTemplateVars().keySet(); - return keys.toArray(new String[keys.size()]); - } - - public void putParameter(String key, Object value) { - if (value instanceof String) { - extensions.put(key, (String) value); - } - } - - public void addFile(IProject project, IPath name, InputStream contents, IProgressMonitor monitor) - throws CoreException { - monitor.beginTask(name.toOSString(), 100); - final IFile file = project.getFile(name); - if (!file.exists()) { - create(file.getParent()); - } - file.create(contents, false, new SubProgressMonitor(monitor, 100)); - monitor.done(); - } - - private void create(IContainer parent) throws CoreException { - if (!parent.exists() && parent instanceof IFolder) { - create(parent.getParent()); - ((IFolder) parent).create(false, true, new NullProgressMonitor()); + @Override + public Object getNewValue() { + return value; + } + }); } } }