00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 package org.objectweb.cjdbc.common.sql.metadata;
00026
00027 import java.util.HashMap;
00028 import java.util.Iterator;
00029
00030 import org.objectweb.cjdbc.common.log.Trace;
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 public final class MetadataContainer extends HashMap
00042 {
00043 private final String line = System.getProperty("line.separator");
00044 private String url;
00045
00046
00047
00048
00049
00050
00051 public MetadataContainer(String url)
00052 {
00053 this.url = url;
00054 }
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 public boolean isCompatible(MetadataContainer container, Trace logger)
00066 {
00067 if (keySet() == null)
00068 return container.keySet() == null;
00069 Iterator keys = keySet().iterator();
00070 boolean isCompatible = true;
00071 String key;
00072 Object value1;
00073 Object value2;
00074 String log;
00075 while (keys.hasNext())
00076 {
00077 key = (String) keys.next();
00078 value1 = get(key);
00079 value2 = container.get(key);
00080 if (!value1.equals(value2))
00081 {
00082 isCompatible = false;
00083 log = "Metadata key [" + key + "] is not compatible. (Backends are: ["
00084 + url + "] and [" + container.getUrl() + "] ; Values are:["
00085 + value1 + "] and [" + value2 + "])";
00086 if (logger != null)
00087 logger.warn(log);
00088 else
00089 System.err.println(log);
00090 }
00091 }
00092 return isCompatible;
00093 }
00094
00095
00096
00097
00098 public String toString()
00099 {
00100 if (keySet() == null)
00101 return "no metadata";
00102 StringBuffer buffer = new StringBuffer();
00103 Iterator keys = keySet().iterator();
00104 String element;
00105 while (keys.hasNext())
00106 {
00107 element = (String) keys.next();
00108 buffer.append(element + " : " + this.get(element) + line);
00109 }
00110 return buffer.toString();
00111 }
00112
00113
00114
00115
00116
00117
00118 public String getUrl()
00119 {
00120 return url;
00121 }
00122
00123
00124
00125
00126
00127
00128
00129
00130 public static String getContainerKey(String methodName,
00131 Class[] parametersType, Object[] arguments)
00132 {
00133 if (parametersType == null)
00134 {
00135 return methodName;
00136 }
00137 else
00138 {
00139 StringBuffer key = new StringBuffer(methodName);
00140 key.append('(');
00141 for (int i = 0; i < parametersType.length; i++)
00142 {
00143 Class c = parametersType[i];
00144 if (c != null)
00145 key.append(c.getName());
00146 else
00147 key.append("null");
00148 key.append('=');
00149 Object arg = arguments[i];
00150 if (arg != null)
00151 key.append(arg.toString());
00152 else
00153 key.append("null");
00154 key.append(',');
00155 }
00156
00157 key.setCharAt(key.length() - 1, ')');
00158 return key.toString();
00159 }
00160 }
00161 }