/*! ****************************************************************************** * * Pentaho Data Integration * * Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com * ******************************************************************************* * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ package org.pentaho.di.core.undo; import org.pentaho.di.core.NotePadMeta; import org.pentaho.di.core.database.DatabaseMeta; import org.pentaho.di.core.gui.Point; import org.pentaho.di.i18n.BaseMessages; import org.pentaho.di.job.JobHopMeta; import org.pentaho.di.job.entry.JobEntryCopy; import org.pentaho.di.trans.TransHopMeta; import org.pentaho.di.trans.step.StepMeta; /** * This class store undo and redo information... * * Possible changes to a transformation: * <p> * step * <p> * hop * <p> * note * <p> * connection * <p> * * Build an Undo/Redo class containing: * <p> * Type of change * <p> * Description of action * <p> * Link to previous infomation * <p> * * @author Matt * @since 19-12-2003 * */ public class TransAction { private static Class<?> PKG = TransAction.class; // for i18n purposes, needed by Translator2!! public static final int TYPE_ACTION_NONE = 0; public static final int TYPE_ACTION_CHANGE_STEP = 1; public static final int TYPE_ACTION_CHANGE_CONNECTION = 2; public static final int TYPE_ACTION_CHANGE_HOP = 3; public static final int TYPE_ACTION_CHANGE_NOTE = 4; public static final int TYPE_ACTION_NEW_STEP = 5; public static final int TYPE_ACTION_NEW_CONNECTION = 6; public static final int TYPE_ACTION_NEW_HOP = 7; public static final int TYPE_ACTION_NEW_NOTE = 8; public static final int TYPE_ACTION_DELETE_STEP = 9; public static final int TYPE_ACTION_DELETE_CONNECTION = 10; public static final int TYPE_ACTION_DELETE_HOP = 11; public static final int TYPE_ACTION_DELETE_NOTE = 12; public static final int TYPE_ACTION_POSITION_STEP = 13; public static final int TYPE_ACTION_POSITION_NOTE = 14; public static final int TYPE_ACTION_CHANGE_JOB_ENTRY = 15; public static final int TYPE_ACTION_CHANGE_JOB_HOP = 16; public static final int TYPE_ACTION_NEW_JOB_ENTRY = 17; public static final int TYPE_ACTION_NEW_JOB_HOP = 18; public static final int TYPE_ACTION_DELETE_JOB_ENTRY = 19; public static final int TYPE_ACTION_DELETE_JOB_HOP = 20; public static final int TYPE_ACTION_POSITION_JOB_ENTRY = 21; public static final int TYPE_ACTION_CHANGE_TABLEITEM = 22; public static final int TYPE_ACTION_NEW_TABLEITEM = 23; public static final int TYPE_ACTION_DELETE_TABLEITEM = 24; public static final int TYPE_ACTION_POSITION_TABLEITEM = 25; public static final int TYPE_ACTION_CHANGE_TABLE = 26; public static final int TYPE_ACTION_CHANGE_RELATIONSHIP = 27; public static final int TYPE_ACTION_NEW_TABLE = 28; public static final int TYPE_ACTION_NEW_RELATIONSHIP = 29; public static final int TYPE_ACTION_DELETE_TABLE = 30; public static final int TYPE_ACTION_DELETE_RELATIONSHIP = 31; public static final int TYPE_ACTION_POSITION_TABLE = 32; public static final int TYPE_ACTION_NEW_SLAVE = 33; public static final int TYPE_ACTION_CHANGE_SLAVE = 34; public static final int TYPE_ACTION_DELETE_SLAVE = 35; public static final int TYPE_ACTION_NEW_CLUSTER = 36; public static final int TYPE_ACTION_CHANGE_CLUSTER = 37; public static final int TYPE_ACTION_DELETE_CLUSTER = 38; public static final int TYPE_ACTION_NEW_PARTITION = 39; public static final int TYPE_ACTION_CHANGE_PARTITION = 40; public static final int TYPE_ACTION_DELETE_PARTITION = 41; public static final String[] desc_action = new String[] { "", BaseMessages.getString( PKG, "TransAction.label.ChangeStep" ), BaseMessages.getString( PKG, "TransAction.label.ChangeConnection" ), BaseMessages.getString( PKG, "TransAction.label.ChangeHop" ), BaseMessages.getString( PKG, "TransAction.label.ChangeNote" ), BaseMessages.getString( PKG, "TransAction.label.NewStep" ), BaseMessages.getString( PKG, "TransAction.label.NewConnection" ), BaseMessages.getString( PKG, "TransAction.label.NewHop" ), BaseMessages.getString( PKG, "TransAction.label.NewNote" ), BaseMessages.getString( PKG, "TransAction.label.DeleteStep" ), BaseMessages.getString( PKG, "TransAction.label.DeleteConnection" ), BaseMessages.getString( PKG, "TransAction.label.DeleteHop" ), BaseMessages.getString( PKG, "TransAction.label.DeleteNote" ), BaseMessages.getString( PKG, "TransAction.label.PositionStep" ), BaseMessages.getString( PKG, "TransAction.label.PositionNote" ), BaseMessages.getString( PKG, "TransAction.label.ChangeJobEntry" ), BaseMessages.getString( PKG, "TransAction.label.ChangeJobHop" ), BaseMessages.getString( PKG, "TransAction.label.NewJobEntry" ), BaseMessages.getString( PKG, "TransAction.label.NewJobHop" ), BaseMessages.getString( PKG, "TransAction.label.DeleteJobEntry" ), BaseMessages.getString( PKG, "TransAction.label.DeleteJobHop" ), BaseMessages.getString( PKG, "TransAction.label.PositionJobEntry" ), BaseMessages.getString( PKG, "TransAction.label.ChangeTableRow" ), BaseMessages.getString( PKG, "TransAction.label.NewTableRow" ), BaseMessages.getString( PKG, "TransAction.label.DeleteTableRow" ), BaseMessages.getString( PKG, "TransAction.label.PositionTableRow" ), BaseMessages.getString( PKG, "TransAction.label.ChangeTable" ), BaseMessages.getString( PKG, "TransAction.label.ChangeRelationship" ), BaseMessages.getString( PKG, "TransAction.label.NewTable" ), BaseMessages.getString( PKG, "TransAction.label.NewRelationship" ), BaseMessages.getString( PKG, "TransAction.label.DeleteTable" ), BaseMessages.getString( PKG, "TransAction.label.DeleteRelationship" ), BaseMessages.getString( PKG, "TransAction.label.PositionTable" ) }; private int type; private Object[] previous; private Point[] previous_location; private int[] previous_index; private Object[] current; private Point[] current_location; private int[] current_index; private boolean nextAlso; public TransAction() { type = TYPE_ACTION_NONE; } public void setDelete( Object[] prev, int[] idx ) { current = prev; current_index = idx; if ( prev[0] instanceof StepMeta ) { type = TYPE_ACTION_DELETE_STEP; } if ( prev[0] instanceof DatabaseMeta ) { type = TYPE_ACTION_DELETE_CONNECTION; } if ( prev[0] instanceof TransHopMeta ) { type = TYPE_ACTION_DELETE_HOP; } if ( prev[0] instanceof NotePadMeta ) { type = TYPE_ACTION_DELETE_NOTE; } if ( prev[0] instanceof JobEntryCopy ) { type = TYPE_ACTION_DELETE_JOB_ENTRY; } if ( prev[0] instanceof JobHopMeta ) { type = TYPE_ACTION_DELETE_JOB_HOP; } if ( prev[0] instanceof String[] ) { type = TYPE_ACTION_DELETE_TABLEITEM; } } public void setChanged( Object[] prev, Object[] curr, int[] idx ) { previous = prev; current = curr; current_index = idx; previous_index = idx; if ( prev[0] instanceof StepMeta ) { type = TYPE_ACTION_CHANGE_STEP; } if ( prev[0] instanceof DatabaseMeta ) { type = TYPE_ACTION_CHANGE_CONNECTION; } if ( prev[0] instanceof TransHopMeta ) { type = TYPE_ACTION_CHANGE_HOP; } if ( prev[0] instanceof NotePadMeta ) { type = TYPE_ACTION_CHANGE_NOTE; } if ( prev[0] instanceof JobEntryCopy ) { type = TYPE_ACTION_CHANGE_JOB_ENTRY; } if ( prev[0] instanceof JobHopMeta ) { type = TYPE_ACTION_CHANGE_JOB_HOP; } if ( prev[0] instanceof String[] ) { type = TYPE_ACTION_CHANGE_TABLEITEM; } } public void setNew( Object[] prev, int[] position ) { if ( prev.length == 0 ) { return; } current = prev; current_index = position; previous = null; if ( prev[0] instanceof StepMeta ) { type = TYPE_ACTION_NEW_STEP; } if ( prev[0] instanceof DatabaseMeta ) { type = TYPE_ACTION_NEW_CONNECTION; } if ( prev[0] instanceof TransHopMeta ) { type = TYPE_ACTION_NEW_HOP; } if ( prev[0] instanceof NotePadMeta ) { type = TYPE_ACTION_NEW_NOTE; } if ( prev[0] instanceof JobEntryCopy ) { type = TYPE_ACTION_NEW_JOB_ENTRY; } if ( prev[0] instanceof JobHopMeta ) { type = TYPE_ACTION_NEW_JOB_HOP; } if ( prev[0] instanceof String[] ) { type = TYPE_ACTION_NEW_TABLEITEM; } } public void setPosition( Object[] obj, int[] idx, Point[] prev, Point[] curr ) { if ( prev.length != curr.length ) { return; } previous_location = new Point[prev.length]; current_location = new Point[curr.length]; current = obj; current_index = idx; for ( int i = 0; i < prev.length; i++ ) { previous_location[i] = new Point( prev[i].x, prev[i].y ); current_location[i] = new Point( curr[i].x, curr[i].y ); } Object fobj = obj[0]; if ( fobj instanceof StepMeta ) { type = TYPE_ACTION_POSITION_STEP; } if ( fobj instanceof NotePadMeta ) { type = TYPE_ACTION_POSITION_NOTE; } if ( fobj instanceof JobEntryCopy ) { type = TYPE_ACTION_POSITION_JOB_ENTRY; } } public void setItemMove( int[] prev, int[] curr ) { previous_location = null; current_location = null; current = null; current_index = curr; previous = null; previous_index = prev; type = TYPE_ACTION_POSITION_TABLEITEM; } public int getType() { return type; } public Object[] getPrevious() { return previous; } public Object[] getCurrent() { return current; } public Point[] getPreviousLocation() { return previous_location; } public Point[] getCurrentLocation() { return current_location; } public int[] getPreviousIndex() { return previous_index; } public int[] getCurrentIndex() { return current_index; } /** * Indicate that the next operations needs to be undone too. * * @param nextAlso * The nextAlso to set. */ public void setNextAlso( boolean nextAlso ) { this.nextAlso = nextAlso; } /** * Get the status of the nextAlso flag. * * @return true if the next operation needs to be done too. */ public boolean getNextAlso() { return nextAlso; } public String toString() { String retval = ""; if ( type < 0 || type >= desc_action.length ) { return TransAction.class.getName(); } retval = desc_action[type]; if ( current != null && current.length > 1 ) { retval += " (x" + current.length + ")"; } return retval; } }