/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.meta.action.impl; import java.util.Properties; import org.jboss.tools.common.meta.action.impl.handlers.PasteHandler; import org.jboss.tools.common.model.XModelException; import org.jboss.tools.common.model.XModelObjectConstants; public class MultistepWizardSupport extends SpecialWizardSupport { protected MultistepWizardStep[] steps = createSteps(); protected MultistepWizardStep[] createSteps() { return new MultistepWizardStep[0]; } protected void initSteps() { for(int i = 0; i < steps.length; i++) { steps[i].setSupport(this, i); } } protected int[] previousSteps = new int[10]; public void action(String name) throws XModelException { if(FINISH.equals(name)) { execute(); setFinished(true); } else if(CANCEL.equals(name)) { getProperties().setProperty(PasteHandler.IS_CANCELLED, XModelObjectConstants.TRUE); setFinished(true); } else if(NEXT.equals(name)) { int next = next(); previousSteps[next] = getStepId(); setStepId(next); } else if(BACK.equals(name)) { setStepId(previousSteps[getStepId()]); } else if(HELP.equals(name)) { help(); } } public int getPreviousStepId() { return previousSteps[getStepId()]; } static String[] N_F_C_ACTIONS = new String[]{NEXT, FINISH, CANCEL, HELP}; static String[] F_C_ACTIONS = new String[]{FINISH, CANCEL, HELP}; static String[] B_F_C_ACTIONS = new String[]{BACK, FINISH, CANCEL, HELP}; static String[] B_N_F_C_ACTIONS = new String[]{BACK, NEXT, FINISH, CANCEL, HELP}; public String[] getActionNames(int stepId) { if(stepId == 0) { return (hasNext(stepId) ? N_F_C_ACTIONS : F_C_ACTIONS); } else { return (hasNext(stepId) ? B_N_F_C_ACTIONS : B_F_C_ACTIONS); } } protected boolean hasNext(int stepId) { return stepId < steps.length - 1; } public String getStepImplementingClass(int stepId) { if(stepId >= 0 && stepId < steps.length) return steps[stepId].getStepImplementingClass(); return super.getStepImplementingClass(stepId); } public boolean isFieldEditorEnabled(int stepId, String name, Properties values) { return steps[stepId].isFieldEditorEnabled(name, values); } //override private int next() throws XModelException { int step = getStepId() + 1; while(!isRequired(step)) ++step; prepareStep(step); return step; } protected void prepareStep(int nextStep) throws XModelException { } protected boolean isRequired(int nextStep) { return true; } protected void execute() throws XModelException {} }