X-Git-Url: https://juplo.de/gitweb/?p=website;a=blobdiff_plain;f=dist%2Fhibernate-maven-plugin-2.1.0%2Fxref%2Fde%2Fjuplo%2Fplugins%2Fhibernate%2FModificationTracker.html;fp=dist%2Fhibernate-maven-plugin-2.1.0%2Fxref%2Fde%2Fjuplo%2Fplugins%2Fhibernate%2FModificationTracker.html;h=cb669fc6b258c0a610cfd413b766a90f51ae3e36;hp=0000000000000000000000000000000000000000;hb=a53595184bd6e57bdc45292cc92c393c4e2dfe6e;hpb=c48c9ee0e9faa89a4c0a5323b367b9f5a6abe602 diff --git a/dist/hibernate-maven-plugin-2.1.0/xref/de/juplo/plugins/hibernate/ModificationTracker.html b/dist/hibernate-maven-plugin-2.1.0/xref/de/juplo/plugins/hibernate/ModificationTracker.html new file mode 100644 index 00000000..cb669fc6 --- /dev/null +++ b/dist/hibernate-maven-plugin-2.1.0/xref/de/juplo/plugins/hibernate/ModificationTracker.html @@ -0,0 +1,224 @@ + + + +ModificationTracker xref + + + +
View Javadoc
+1   package de.juplo.plugins.hibernate;
+2   
+3   
+4   import java.io.File;
+5   import java.io.FileInputStream;
+6   import java.io.FileOutputStream;
+7   import java.io.IOException;
+8   import java.io.InputStream;
+9   import java.io.ObjectInputStream;
+10  import java.io.ObjectOutputStream;
+11  import java.math.BigInteger;
+12  import java.security.MessageDigest;
+13  import java.security.NoSuchAlgorithmException;
+14  import java.util.HashMap;
+15  import java.util.HashSet;
+16  import java.util.Map;
+17  import java.util.Properties;
+18  import java.util.Set;
+19  import org.apache.maven.plugin.logging.Log;
+20  
+21  
+22  
+23  /**
+24   *
+25   * @author Kai Moritz
+26   */
+27  public class ModificationTracker
+28  {
+29    private Map<String,String> properties;
+30    private Map<String,String> classes;
+31  
+32    private final Set<String> propertyNames;
+33    private final Set<String> classNames;
+34  
+35    private boolean modified = false;
+36    private boolean failed = false;
+37  
+38    private final File saved;
+39    private final MessageDigest digest;
+40    private final Log log;
+41  
+42  
+43    ModificationTracker(String buildDirectory, String filename, Log log)
+44        throws
+45          NoSuchAlgorithmException
+46    {
+47      propertyNames = new HashSet<String>();
+48      classNames = new HashSet<String>();
+49      File output = new File(filename + ".md5s");
+50      if (output.isAbsolute())
+51      {
+52        saved = output;
+53      }
+54      else
+55      {
+56        // Interpret relative file path relative to build directory
+57        saved = new File(buildDirectory, output.getPath());
+58        log.debug("Adjusted relative path, resulting path is " + saved.getPath());
+59      }
+60      digest = java.security.MessageDigest.getInstance("MD5");
+61      this.log = log;
+62    }
+63  
+64  
+65    private String calculate(InputStream is)
+66        throws
+67          IOException
+68    {
+69      byte[] buffer = new byte[1024*4]; // copy data in 4MB-chunks
+70      int i;
+71      while((i = is.read(buffer)) > -1)
+72        digest.update(buffer, 0, i);
+73      is.close();
+74      byte[] bytes = digest.digest();
+75      BigInteger bi = new BigInteger(1, bytes);
+76      return String.format("%0" + (bytes.length << 1) + "x", bi);
+77    }
+78  
+79    private boolean check(Map<String,String> values, String name, String value)
+80    {
+81      if (!values.containsKey(name) || !values.get(name).equals(value))
+82      {
+83        values.put(name, value);
+84        return true;
+85      }
+86      else
+87        return false;
+88    }
+89  
+90  
+91    boolean track(String name, InputStream is) throws IOException
+92    {
+93      boolean result = check(classes, name, calculate(is));
+94      classNames.add(name);
+95      modified |= result;
+96      return result;
+97    }
+98  
+99  
+100   boolean check(String name, String property)
+101   {
+102     propertyNames.add(name);
+103     return check(properties, name, property);
+104   }
+105 
+106   boolean track(String name, String property)
+107   {
+108     boolean result = check(name, property);
+109     modified |= result;
+110     return result;
+111   }
+112 
+113   boolean track(Properties properties)
+114   {
+115     boolean result = false;
+116     for (String name : properties.stringPropertyNames())
+117       result |= track(name, properties.getProperty(name));
+118     return result;
+119   }
+120 
+121 
+122   void touch()
+123   {
+124     modified = true;
+125   }
+126 
+127   boolean modified()
+128   {
+129     for (String property : new HashSet<String>(properties.keySet()))
+130       if (!propertyNames.contains(property))
+131       {
+132         modified = true;
+133         properties.remove(property);
+134       }
+135      for (String clazz : new HashSet<String>(classes.keySet()))
+136       if (!classNames.contains(clazz))
+137       {
+138         modified = true;
+139         classes.remove(clazz);
+140       }
+141     return modified;
+142   }
+143 
+144 
+145   void failed()
+146   {
+147     failed = true;
+148   }
+149 
+150 
+151   void load()
+152   {
+153     if (saved.isFile() && saved.length() > 0)
+154     {
+155       try
+156       {
+157         FileInputStream fis = new FileInputStream(saved);
+158         ObjectInputStream ois = new ObjectInputStream(fis);
+159         properties = (HashMap<String,String>)ois.readObject();
+160         classes = (HashMap<String,String>)ois.readObject();
+161         ois.close();
+162       }
+163       catch (Exception e)
+164       {
+165         properties = new HashMap<String,String>();
+166         classes = new HashMap<String,String>();
+167         log.warn("Cannot read md5s from saved: " + e);
+168       }
+169     }
+170     else
+171     {
+172       properties = new HashMap<String,String>();
+173       classes = new HashMap<String,String>();
+174       try
+175       {
+176         saved.createNewFile();
+177       }
+178       catch (IOException e)
+179       {
+180         log.debug("Cannot create file \"" + saved.getPath() + "\" for md5s: " + e);
+181       }
+182     }
+183   }
+184 
+185   void save()
+186   {
+187     if (failed)
+188     {
+189       saved.delete();
+190       return;
+191     }
+192 
+193     if (!modified)
+194       return;
+195 
+196     /** Write md5-sums for annotated classes to file */
+197     try
+198     {
+199       FileOutputStream fos = new FileOutputStream(saved);
+200       ObjectOutputStream oos = new ObjectOutputStream(fos);
+201       oos.writeObject(properties);
+202       oos.writeObject(classes);
+203       oos.close();
+204       fos.close();
+205     }
+206     catch (Exception e)
+207     {
+208       log.error("Cannot write md5-sums to file: " + e);
+209     }
+210   }  
+211 }
+
+
+ + +