| package org.apache.ode.bpel.obj.migrate; |
| |
| import java.lang.reflect.Field; |
| import java.util.List; |
| |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| import org.apache.ode.bpel.obj.ExtensibleImpl; |
| |
| /** |
| * Check if the specified OModel Object is newest. Used as a visitor of |
| * {@link ObjectTraverser}. |
| * |
| * @see ObjectTraverser |
| */ |
| public class UpgradeChecker extends AbstractObjectVisitor{ |
| private static final Logger __log = LoggerFactory.getLogger(UpgradeChecker.class); |
| |
| private boolean newest = true; |
| @Override |
| public Object visitPojo(Object obj) { |
| if (! (obj instanceof ExtensibleImpl)){ |
| return null; |
| } |
| visitExtensible(obj); |
| return null; |
| } |
| |
| private void visitExtensible(Object obj) { |
| ExtensibleImpl eobj = (ExtensibleImpl)obj; |
| int currentVersion = 1; |
| try { |
| currentVersion = (Integer) eobj.getClass().getField("CURRENT_CLASS_VERSION").get(obj); |
| } catch (Exception e) { |
| // should never get here |
| e.printStackTrace(); |
| } |
| if (eobj.getClassVersion() != currentVersion){ |
| newest = false; |
| __log.debug(obj.getClass() + "hasn't upgraded to newest version. current: " |
| + eobj.getClassVersion() + ", newest: " + currentVersion); |
| } |
| List<Field> fields = MigUtils.getAllFields(obj.getClass()); |
| for (Field f : fields){ |
| f.setAccessible(true); |
| try { |
| Object value = f.get(obj); |
| if (value != null){ |
| traverse.traverseObject(value); |
| } |
| } catch (Exception e){ |
| throw new RuntimeException(e); |
| } |
| } |
| } |
| |
| public boolean isNewest() { |
| return newest; |
| } |
| } |