com.ibm.jbatch.container.jsl.impl.UnmarshalledJSLComparator Maven / Gradle / Ivy
The newest version!
/**
* Copyright 2012 International Business Machines Corp.
*
* See the NOTICE file distributed with this work for additional information
* regarding copyright ownership. 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 com.ibm.jbatch.container.jsl.impl;
import com.ibm.jbatch.jsl.model.Chunk;
import com.ibm.jbatch.jsl.model.JSLJob;
import com.ibm.jbatch.jsl.model.JSLProperties;
import com.ibm.jbatch.jsl.model.Listener;
import com.ibm.jbatch.jsl.model.Listeners;
import com.ibm.jbatch.jsl.model.Property;
import com.ibm.jbatch.jsl.model.Step;
public class UnmarshalledJSLComparator {
public static boolean equals(JSLJob job1, JSLJob job2) {
if(job1 == null && job2 == null) return true;
if(job1 == null || job2 == null) return false;
boolean stillEqual = true;
//for each attribute, stillEqual && equal(that attribute)
stillEqual = stillEqual &&
equals(job1.getListeners(), job2.getListeners()) &&
equals(job1.getProperties(), job2.getProperties()) &&
true;
return stillEqual;
}
/**
* Compare two <properties> elements and their contents. The properties need not
* be in the same order.
* @param jslprops1 first <properties> element, could be null
* @param jslprops2 second <properties> element, could be null
* @return whether JSLProperties contain the same property names/values
*/
public static boolean equals(JSLProperties jslprops1, JSLProperties jslprops2) {
//TODO: test cases
if(jslprops1 == null && jslprops2 == null) return true;
if(jslprops1 == null || jslprops2 == null) return false;
boolean stillEqual = true;
for(Property prop1 : jslprops1.getPropertyList()) {
boolean isListenerInOtherList = false;
for(Property prop2 : jslprops2.getPropertyList()) {
if(equals(prop1, prop2))
isListenerInOtherList = true;
}
stillEqual = stillEqual && isListenerInOtherList;
}
return stillEqual;
}
/**
* Checks parameters for null before .equals() comparison between them. To be used
* on leaf nodes of JSLJob hierarchy, e.g.; Java Strings or other built-ins.
* @param o1
* @param o2
* @return true if o1 == o2 == null or if o1.equals(o2), and false otherwise.
*/
public static boolean nullSafeEquals(Object o1, Object o2) {
if(o1 == null && o2 == null) return true; // null == null
if(o1 == null || o2 == null) return false; // null != non-null
return o1.equals(o2); //evaluate
}
public static boolean equals(Property prop1, Property prop2) {
if(prop1 == null && prop2 == null) return true;
if(prop1 == null || prop2 == null) return false;
return nullSafeEquals(prop1.getName(), prop2.getName()) &&
nullSafeEquals(prop1.getValue(), prop2.getValue());
}
public static boolean equals(Listeners listeners1, Listeners listeners2) {
if(listeners1 == null && listeners2 == null) return true;
if(listeners1 == null || listeners2 == null) return false;
boolean stillEqual = true;
for(Listener listener1 : listeners1.getListenerList()) {
boolean isListenerInOtherList = false;
for(Listener listener2 : listeners2.getListenerList()) {
if(equals(listener1, listener2))
isListenerInOtherList = true;
}
stillEqual = stillEqual && isListenerInOtherList;
}
return stillEqual;
}
public static boolean equals(Listener listener1, Listener listener2) {
if(listener1 == null && listener2 == null) return true;
if(listener1 == null || listener2 == null) return false;
boolean stillEqual = true;
stillEqual = stillEqual &&
nullSafeEquals(listener1.getRef(), listener2.getRef()) &&
equals(listener1.getProperties(), listener2.getProperties());
return stillEqual;
}
public static boolean equals(Step step1, Step step2) {
if(step1 == null && step2 == null) return true;
if(step1 == null || step2 == null) return false;
//TODO: finish with remaining fields
return equals(step1.getChunk(), step2.getChunk()) &&
equals(step1.getListeners(), step2.getListeners()) &&
equals(step1.getProperties(), step2.getProperties()) &&
nullSafeEquals(step1.getAllowStartIfComplete(), step2.getAllowStartIfComplete()) &&
nullSafeEquals(step1.getNextFromAttribute(), step2.getNextFromAttribute());
}
public static boolean equals(Chunk chunk1, Chunk chunk2) {
if(chunk1 == null && chunk2 == null) return true;
if(chunk1 == null || chunk2 == null) return false;
return nullSafeEquals(chunk1.getCheckpointPolicy(), chunk2.getCheckpointPolicy()) &&
nullSafeEquals(chunk1.getItemCount(), chunk2.getItemCount()) &&
nullSafeEquals(chunk1.getTimeLimit(), chunk2.getTimeLimit()) &&
nullSafeEquals(chunk1.getProcessor(), chunk2.getProcessor()) &&
nullSafeEquals(chunk1.getReader(), chunk2.getReader()) &&
nullSafeEquals(chunk1.getRetryLimit(), chunk2.getRetryLimit()) &&
nullSafeEquals(chunk1.getSkipLimit(), chunk2.getSkipLimit()) &&
nullSafeEquals(chunk1.getWriter(), chunk2.getWriter());
}
}