1 /** 2 * Copyright 2005 Steve Molloy 3 * 4 * This file is part of OV4J. 5 * 6 * OV4J is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as 7 * published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 8 * 9 * OV4J is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty 10 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License along with OV4J; if not, write to the Free Software 13 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 14 * 15 */ 16 package org.ov4j.comp; 17 18 import java.io.Serializable; 19 import java.util.logging.Level; 20 import java.util.logging.Logger; 21 22 import org.ov4j.data.Version; 23 24 /** 25 * This class is used to compare versions. 26 * 27 * @author smolloy 28 * 29 */ 30 public class VersionComparisonResult<T extends Comparable<? super T> & Cloneable & Serializable> extends 31 ComparisonResult<Version<T>> { 32 /** 33 * Logger for this class 34 */ 35 private static final Logger logger = Logger.getLogger(VersionComparisonResult.class.getName()); 36 37 /** 38 * @see org.ov4j.comp.ComparisonResult#compute() 39 */ 40 @Override 41 public void compute() { 42 if (VersionComparisonResult.logger.isLoggable(Level.FINER)) { 43 VersionComparisonResult.logger.entering("VersionComparisonResult", "compute()", "start"); 44 } 45 46 if (getChanged() != null && getOriginal() != null) { 47 try { 48 final ComparisonResult<T> compRes = 49 ComparisonResult.<T, ComparisonResult<T>> findComparisonResultClass( 50 (getOriginal()).getVersionedObject()).newInstance(); 51 compRes.setChanged(getChanged().getVersionedObject()); 52 compRes.setOriginal(getOriginal().getVersionedObject()); 53 compRes.compute(); 54 final NumericComparisonResult<Integer> numComp = new NumericComparisonResult<Integer>(); 55 numComp.setChanged((getChanged()).getVersionNumber()); 56 numComp.setOriginal((getOriginal()).getVersionNumber()); 57 numComp.compute(); 58 final StringComparisonResult autComp = new StringComparisonResult(); 59 autComp.setChanged((getChanged()).getAuthor()); 60 autComp.setOriginal((getOriginal()).getAuthor()); 61 autComp.compute(); 62 final StringComparisonResult comComp = new StringComparisonResult(); 63 comComp.setChanged((getChanged()).getComment()); 64 comComp.setOriginal((getOriginal()).getComment()); 65 comComp.compute(); 66 setPrecision(0.6 * compRes.getPrecision() + 0.2 * numComp.getPrecision() + 0.1 * autComp.getPrecision() 67 + 0.1 * comComp.getPrecision()); 68 setRecall(0.6 * compRes.getRecall() + 0.2 * numComp.getRecall() + 0.1 * autComp.getRecall() + 0.1 69 * comComp.getRecall()); 70 } catch (final InstantiationException e) { 71 if (VersionComparisonResult.logger.isLoggable(Level.FINE)) { 72 VersionComparisonResult.logger.logp(Level.FINE, "VersionComparisonResult", "compute()", 73 "exception ignored", e); 74 } 75 } catch (final IllegalAccessException e) { 76 if (VersionComparisonResult.logger.isLoggable(Level.FINE)) { 77 VersionComparisonResult.logger.logp(Level.FINE, "VersionComparisonResult", "compute()", 78 "exception ignored", e); 79 } 80 } catch (final ClassNotFoundException e) { 81 if (VersionComparisonResult.logger.isLoggable(Level.FINE)) { 82 VersionComparisonResult.logger.logp(Level.FINE, "VersionComparisonResult", "compute()", 83 "exception ignored", e); 84 } 85 } 86 } 87 88 if (VersionComparisonResult.logger.isLoggable(Level.FINER)) { 89 VersionComparisonResult.logger.exiting("VersionComparisonResult", "compute()", "end"); 90 } 91 } 92 93 /** 94 * @see org.ov4j.comp.ComparisonResult#fastCompute() 95 */ 96 @Override 97 public void fastCompute() { 98 if (VersionComparisonResult.logger.isLoggable(Level.FINER)) { 99 VersionComparisonResult.logger.entering("VersionComparisonResult", "fastCompute()", "start"); 100 } 101 102 if (getOriginal() != null && getChanged() != null 103 && getOriginal().getVersionNumber() == getChanged().getVersionNumber()) { 104 try { 105 final ComparisonResult<T> compRes = 106 ComparisonResult.<T, ComparisonResult<T>> findComparisonResultClass( 107 (getOriginal()).getVersionedObject()).newInstance(); 108 compRes.setChanged(getChanged().getVersionedObject()); 109 compRes.setOriginal(getOriginal().getVersionedObject()); 110 compRes.fastCompute(); 111 setPrecision(compRes.getPrecision()); 112 } catch (final ClassNotFoundException e) { 113 if (VersionComparisonResult.logger.isLoggable(Level.FINE)) { 114 VersionComparisonResult.logger.logp(Level.FINE, "VersionComparisonResult", "fastCompute()", 115 "exception ignored", e); 116 } 117 } catch (final InstantiationException e) { 118 if (VersionComparisonResult.logger.isLoggable(Level.FINE)) { 119 VersionComparisonResult.logger.logp(Level.FINE, "VersionComparisonResult", "fastCompute()", 120 "exception ignored", e); 121 } 122 } catch (final IllegalAccessException e) { 123 if (VersionComparisonResult.logger.isLoggable(Level.FINE)) { 124 VersionComparisonResult.logger.logp(Level.FINE, "VersionComparisonResult", "fastCompute()", 125 "exception ignored", e); 126 } 127 } 128 } 129 130 if (VersionComparisonResult.logger.isLoggable(Level.FINER)) { 131 VersionComparisonResult.logger.exiting("VersionComparisonResult", "fastCompute()", "end"); 132 } 133 } 134 135 }