/* * This software is Copyright 2005,2006,2007,2008 Langdale Consultants. * Langdale Consultants can be contacted at: http://www.langdale.com.au */ package au.com.langdale.cimtoole.editors.profile; import static au.com.langdale.ui.builder.Templates.CheckboxTableViewer; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Shell; import au.com.langdale.cimtoole.editors.ProfileEditor; import au.com.langdale.kena.Composition; import au.com.langdale.kena.OntModel; import au.com.langdale.profiles.Refactory; import au.com.langdale.profiles.Remapper; import au.com.langdale.profiles.Reorganizer; import au.com.langdale.ui.binding.BooleanBinding; import au.com.langdale.ui.binding.BooleanModel; import au.com.langdale.ui.binding.BooleanModel.BooleanValue; import au.com.langdale.ui.builder.FurnishedWizardPage; import au.com.langdale.ui.builder.Template; import au.com.langdale.util.Jobs; public class RefactorWizard extends Wizard { private ProfileEditor master; public RefactorWizard(ProfileEditor master) { this.master = master; setNeedsProgressMonitor(true); } public void run() { Shell shell = master.getSite().getWorkbenchWindow().getShell(); WizardDialog dialog = new WizardDialog(shell, this); dialog.create(); dialog.open(); } BooleanValue refs = new BooleanValue("Stereotype all properties as By Reference"); BooleanValue concrete = new BooleanValue("Stereotype leaf classes as Concrete"); BooleanValue remap = new BooleanValue("Repair and remap profile to schema"); BooleanValue reorg = new BooleanValue("Reorganise profile per RDFS rules"); BooleanBinding options = new BooleanBinding() { @Override protected BooleanModel[] getFlags() { return new BooleanModel[] {refs, concrete, remap, reorg}; } @Override public String validate() { if( refs.isTrue() || concrete.isTrue() || remap.isTrue() || reorg.isTrue()) return null; else return "At least one option must be selected"; } }; @Override public void addPages() { setWindowTitle("Repair and Reorganize"); addPage(new RefactorWizardPage()); } public class WizardAction implements IWorkspaceRunnable { OntModel profileModel = master.getProfileModel(); OntModel projectModel = master.getProjectModel(); public void run(IProgressMonitor monitor) throws CoreException { if( profileModel == null || projectModel == null) return; if( remap.isTrue()) { Remapper utility = new Remapper(profileModel, projectModel); utility.run(); monitor.worked(1); } if( reorg.isTrue()) { Reorganizer utility = new Reorganizer(profileModel, projectModel, refs.isTrue()); utility.run(); profileModel = utility.getResult(); monitor.worked(1); } else if( refs.isTrue()) { createRefactory().setByReference(); monitor.worked(1); } if( concrete.isTrue()) { createRefactory().setConcrete(); monitor.worked(1); } } private Refactory createRefactory() { return new Refactory(profileModel, Composition.merge(profileModel, projectModel)); } public void updateProfileModel() { master.updateProfileModel(profileModel); } } @Override public boolean performFinish() { WizardAction action = new WizardAction(); Jobs.runInteractive(action, null, getContainer(), getShell()); action.updateProfileModel(); return true; } private class RefactorWizardPage extends FurnishedWizardPage { public RefactorWizardPage() { super("main"); setTitle(getWindowTitle()); setDescription("Repair and reorganize the profile."); } @Override protected Content createContent() { return new Content() { @Override protected Template define() { return CheckboxTableViewer("options", true); } @Override protected void addBindings() { options.bind("options", this); } }; } } }