From 0ec8481c10cd8277d84c7c1a785483a0a739e5a0 Mon Sep 17 00:00:00 2001 From: abranson Date: Thu, 4 Aug 2011 00:42:34 +0200 Subject: More code cleanup: Refactored Entity Proxy Subscription to handle generics better Rewrote RemoteMap to use TreeMap instead of the internal array for order. It now sorts its keys by number if they parse, else as strings. Removed a no-longer-in-progress outcome form class --- source/com/c2kernel/utils/ActDefCache.java | 33 +++++++---- source/com/c2kernel/utils/CastorArrayList.java | 8 +-- source/com/c2kernel/utils/CastorXMLUtility.java | 10 ++-- source/com/c2kernel/utils/DateUtility.java | 6 +- source/com/c2kernel/utils/Dom4JElementParser.java | 10 ++-- source/com/c2kernel/utils/FileStringUtility.java | 32 +++++++---- .../com/c2kernel/utils/GTimeStampComparator.java | 9 +-- source/com/c2kernel/utils/KeyValuePair.java | 24 ++++---- source/com/c2kernel/utils/Language.java | 18 +++--- source/com/c2kernel/utils/LocalObjectLoader.java | 16 +++--- source/com/c2kernel/utils/Logger.java | 35 ++++++------ source/com/c2kernel/utils/Resource.java | 24 ++++---- source/com/c2kernel/utils/SoftCache.java | 40 ++++++++----- source/com/c2kernel/utils/TransientCache.java | 66 ++++++++++++++-------- source/com/c2kernel/utils/XmlElementParser.java | 32 +++++------ .../c2kernel/utils/server/HTTPRequestHandler.java | 55 ++++++++++-------- .../c2kernel/utils/server/SimpleTCPIPServer.java | 25 ++++---- .../com/c2kernel/utils/server/SocketHandler.java | 10 ++-- source/com/c2kernel/utils/server/UDPListener.java | 15 ++--- 19 files changed, 257 insertions(+), 211 deletions(-) mode change 100755 => 100644 source/com/c2kernel/utils/DateUtility.java mode change 100755 => 100644 source/com/c2kernel/utils/Dom4JElementParser.java mode change 100755 => 100644 source/com/c2kernel/utils/GTimeStampComparator.java mode change 100755 => 100644 source/com/c2kernel/utils/KeyValuePair.java mode change 100755 => 100644 source/com/c2kernel/utils/LocalObjectLoader.java mode change 100755 => 100644 source/com/c2kernel/utils/server/SocketHandler.java mode change 100755 => 100644 source/com/c2kernel/utils/server/UDPListener.java (limited to 'source/com/c2kernel/utils') diff --git a/source/com/c2kernel/utils/ActDefCache.java b/source/com/c2kernel/utils/ActDefCache.java index 148d934..2982aa3 100644 --- a/source/com/c2kernel/utils/ActDefCache.java +++ b/source/com/c2kernel/utils/ActDefCache.java @@ -1,26 +1,26 @@ /** - * + * */ package com.c2kernel.utils; import com.c2kernel.common.InvalidDataException; import com.c2kernel.common.ObjectNotFoundException; -import com.c2kernel.entity.C2KLocalObject; import com.c2kernel.entity.proxy.EntityProxyObserver; import com.c2kernel.entity.proxy.ItemProxy; +import com.c2kernel.entity.proxy.MemberSubscription; import com.c2kernel.lifecycle.ActivityDef; import com.c2kernel.persistency.ClusterStorage; import com.c2kernel.persistency.ClusterStorageException; import com.c2kernel.persistency.outcome.Viewpoint; public class ActDefCache { - + SoftCache actCache = new SoftCache(); - + public ActivityDef get(String actName, String actVersion) throws ObjectNotFoundException, InvalidDataException { ActivityDef thisActDef; synchronized(actCache) { - ActCacheEntry thisActDefEntry = ((ActCacheEntry)actCache.get(actName+"_"+actVersion)); + ActCacheEntry thisActDefEntry = actCache.get(actName+"_"+actVersion); if (thisActDefEntry == null) { Logger.msg(6, actName+" v"+actVersion+" not found in cache. Retrieving."); ItemProxy actDefItem = LocalObjectLoader.loadLocalObjectDef("/desc/ActivityDesc/", actName); @@ -50,7 +50,7 @@ public class ActDefCache { } return thisActDef; } - + public void removeAct(String id) { synchronized(actCache) { if (actCache.keySet().contains(id)) { @@ -60,7 +60,7 @@ public class ActDefCache { } } - public class ActCacheEntry implements EntityProxyObserver { + public class ActCacheEntry implements EntityProxyObserver { public String id; public ItemProxy actProxy; public ActivityDef actDef; @@ -70,22 +70,31 @@ public class ActDefCache { this.actDef = actDef; this.parent = parent; this.actProxy = actProxy; - actProxy.subscribe(this, ClusterStorage.VIEWPOINT, false); + actProxy.subscribe(new MemberSubscription(this, ClusterStorage.VIEWPOINT, false)); } + @Override public void finalize() { parent.removeAct(id); actProxy.unsubscribe(this); } - public void add(C2KLocalObject contents) { + @Override + public void add(Viewpoint contents) { parent.removeAct(id); } - + + @Override public void remove(String id) { parent.removeAct(id); } - + + @Override public String toString() { - return "ActDef cache entry: "+id; + return "ActDef cache entry: "+id; + } + @Override + public void control(String control, String msg) { + // TODO Auto-generated method stub + } } } \ No newline at end of file diff --git a/source/com/c2kernel/utils/CastorArrayList.java b/source/com/c2kernel/utils/CastorArrayList.java index 7596dd9..ed15c0f 100644 --- a/source/com/c2kernel/utils/CastorArrayList.java +++ b/source/com/c2kernel/utils/CastorArrayList.java @@ -5,7 +5,7 @@ import java.util.ArrayList; /************************************************************************** * Wrapper for a root element to an ArrayList. Castor Marshalls arraylists - * as multiple elements, so this class is needed to provide a root element + * as multiple elements, so this class is needed to provide a root element * to stop it crashing. * * $Revision: 1.4 $ @@ -17,12 +17,12 @@ import java.util.ArrayList; // abstract public class CastorArrayList implements Serializable{ public ArrayList list; - + public CastorArrayList() { super(); - list = new ArrayList(); + list = new ArrayList(); } - + public CastorArrayList(ArrayList list) { this(); this.list = list; diff --git a/source/com/c2kernel/utils/CastorXMLUtility.java b/source/com/c2kernel/utils/CastorXMLUtility.java index 1f68e77..4dca391 100644 --- a/source/com/c2kernel/utils/CastorXMLUtility.java +++ b/source/com/c2kernel/utils/CastorXMLUtility.java @@ -21,7 +21,7 @@ import com.c2kernel.persistency.outcome.Outcome; /************************************************************************** * Loads all mapfiles, and wraps marshalling/unmarshalling - * + * * @author $Author: abranson $ $Date: 2004/10/20 14:10:21 $ * @version $Revision: 1.12 $ **************************************************************************/ @@ -33,7 +33,7 @@ public class CastorXMLUtility /** * Looks for a file called 'index.xml' at the given URL, and loads every file * listed in there by relative path - * + * * @param mapURL - map root */ static public void loadMapsFrom(URL mapURL) throws InvalidDataException { @@ -46,7 +46,7 @@ public class CastorXMLUtility Logger.warning("Could not load map index from "+mapURL.toString()); return; } - + StringTokenizer sTokenizer = new StringTokenizer(index); while( sTokenizer.hasMoreTokens() ) { String thisMap = sTokenizer.nextToken(); @@ -55,11 +55,11 @@ public class CastorXMLUtility } catch (Exception e) { Logger.error(e); throw new InvalidDataException("Error loading map '"+thisMap+"'", ""); - } + } } Logger.msg("Loaded all maps from "+mapURL.toString()); } - + /************************************************************************** * Updates a mapping referenced by the mapID. * The same mapping cannot be loaded many times as it generates an exception. diff --git a/source/com/c2kernel/utils/DateUtility.java b/source/com/c2kernel/utils/DateUtility.java old mode 100755 new mode 100644 index 6e3b569..bc9fb05 --- a/source/com/c2kernel/utils/DateUtility.java +++ b/source/com/c2kernel/utils/DateUtility.java @@ -39,7 +39,7 @@ public class DateUtility time.append(timeStamp.mSecond); return time.toString(); } - + public static int getNbDayInYear(GTimeStamp date) { int centuary = date.mYear / 100; @@ -78,7 +78,7 @@ public class DateUtility return 31; } } - + public static long diff(GTimeStamp date1, GTimeStamp date2) { GTimeStamp tmp = new GTimeStamp(date1.mYear, date1.mMonth, date1.mDay, date1.mHour, date1.mMinute, date1.mSecond, date1.mTimeOffset); @@ -114,5 +114,5 @@ public class DateUtility tmp.mDay = tmp.mDay + getNbDayInMonth(tmp); } return (((tmp.mDay - date2.mDay) * 24 + tmp.mHour - date2.mHour) * 60 + tmp.mMinute - date2.mMinute) * 60 + tmp.mSecond - date2.mSecond; - } + } } diff --git a/source/com/c2kernel/utils/Dom4JElementParser.java b/source/com/c2kernel/utils/Dom4JElementParser.java old mode 100755 new mode 100644 index a4d5bbe..e3601e5 --- a/source/com/c2kernel/utils/Dom4JElementParser.java +++ b/source/com/c2kernel/utils/Dom4JElementParser.java @@ -16,14 +16,14 @@ public class Dom4JElementParser try { SAXReader reader = new SAXReader(); - + Document d = reader.read(new StringReader(data)); - List list = d.selectNodes( xpath ); + List list = d.selectNodes( xpath ); String[] returnArray = new String[list.size()]; int i=0; - for ( Iterator iter = list.iterator(); iter.hasNext();i++ ) - { - Object object = iter.next(); + for ( Iterator iter = list.iterator(); iter.hasNext();i++ ) + { + Object object = iter.next(); if (object instanceof Element) returnArray[i]=((Element)object).getText(); else if (object instanceof Attribute) returnArray[i]=((Attribute)object).getText(); } diff --git a/source/com/c2kernel/utils/FileStringUtility.java b/source/com/c2kernel/utils/FileStringUtility.java index 84f46ca..843a44e 100644 --- a/source/com/c2kernel/utils/FileStringUtility.java +++ b/source/com/c2kernel/utils/FileStringUtility.java @@ -1,7 +1,16 @@ package com.c2kernel.utils; //Java -import java.io.*; +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; import java.lang.reflect.Array; import java.net.MalformedURLException; import java.net.URL; @@ -73,7 +82,7 @@ public class FileStringUtility lines.addElement(thisLine); String[] lineArray = new String[lines.size()]; for (int i = 0; i < lines.size(); i++) - lineArray[i] = (String) lines.get(i); + lineArray[i] = lines.get(i); return lineArray; } @@ -106,7 +115,7 @@ public class FileStringUtility **************************************************************************/ static public void string2File(String fileName, String data) throws FileNotFoundException, IOException { - string2File(new File(fileName), data); + string2File(new File(fileName), data); } /************************************************************************** @@ -226,8 +235,8 @@ public class FileStringUtility { files = dir.listFiles(); - for (int i = 0; i < files.length; i++) - deleteDir(files[i].getAbsolutePath(), true, true); + for (File file : files) + deleteDir(file.getAbsolutePath(), true, true); } return deleteDir(dirPath); @@ -255,11 +264,10 @@ public class FileStringUtility files = dir.listFiles(); - for (int i = 0; i < files.length; i++) - { - fileName = files[i].getName(); + for (File file : files) { + fileName = file.getName(); - if (files[i].isFile()) + if (file.isFile()) { fileNames.add(dirPath + "/" + fileName); } @@ -334,7 +342,7 @@ public class FileStringUtility /************************************************************************** * Load the contents of the language file * *************************************************************************/ - static public Hashtable loadLanguageFile(String configFile) + static public Hashtable loadLanguageFile(String configFile) { try { @@ -353,7 +361,7 @@ public class FileStringUtility { Logger.error("FileStringUtility.loadLanguageFile() - could not load language file '" + configFile+"'"); Logger.error(e); - return new Hashtable(); + return new Hashtable(); } } @@ -402,7 +410,7 @@ public class FileStringUtility StringBuffer tmp=new StringBuffer(src); int length = from.length(); int index = tmp.toString().indexOf(from); - while (index>0) + while (index>0) { tmp.replace(index,index+length,to); index = tmp.toString().indexOf(from); diff --git a/source/com/c2kernel/utils/GTimeStampComparator.java b/source/com/c2kernel/utils/GTimeStampComparator.java old mode 100755 new mode 100644 index f57f20d..3680a50 --- a/source/com/c2kernel/utils/GTimeStampComparator.java +++ b/source/com/c2kernel/utils/GTimeStampComparator.java @@ -4,23 +4,24 @@ import java.util.Comparator; import com.c2kernel.common.GTimeStamp; -public class GTimeStampComparator implements Comparator { +public class GTimeStampComparator implements Comparator { + @Override public int compare(Object arg0, Object arg1) { GTimeStamp t0 = (GTimeStamp)arg0; GTimeStamp t1 = (GTimeStamp)arg1; - + int retVal = compareInt(t0.mYear, t1.mYear); if (retVal == 0) retVal = compareInt(t0.mMonth, t1.mMonth); if (retVal == 0) retVal = compareInt(t0.mDay, t1.mDay); if (retVal == 0) retVal = compareInt(t0.mHour-(t0.mTimeOffset/3600), t1.mHour-(t1.mTimeOffset/3600)); if (retVal == 0) retVal = compareInt(t0.mMinute, t1.mMinute); if (retVal == 0) retVal = compareInt(t0.mSecond, t1.mSecond); - + return retVal; } - private int compareInt(int i, int j) { + private static int compareInt(int i, int j) { return i-j; } } diff --git a/source/com/c2kernel/utils/KeyValuePair.java b/source/com/c2kernel/utils/KeyValuePair.java old mode 100755 new mode 100644 index 149797e..5523eb6 --- a/source/com/c2kernel/utils/KeyValuePair.java +++ b/source/com/c2kernel/utils/KeyValuePair.java @@ -13,11 +13,11 @@ public class KeyValuePair mKey = key; mValue = value; } - + public String getKey() { return mKey; } - + public void setKey(String key) { mKey = key; } @@ -25,22 +25,22 @@ public class KeyValuePair public Object getValue() { return mValue; } - + public void setValue(Object value) { mValue = value; } - + public String getStringValue() { if (mValue instanceof String) return (String)mValue; else return null; } - + public void setStringValue(String value) { mValue = value; } - + public Integer getIntegerValue() { if (mValue instanceof Integer) return (Integer)mValue; @@ -58,20 +58,20 @@ public class KeyValuePair else return null; } - + public void setBooleanValue(Boolean value) { mValue = value; - } - + } + public Float getFloatValue() { if (mValue instanceof Float) return (Float)mValue; else return null; } - + public void setFloatValue(Float value) { mValue = value; - } - + } + } diff --git a/source/com/c2kernel/utils/Language.java b/source/com/c2kernel/utils/Language.java index ee74f96..0b71d16 100644 --- a/source/com/c2kernel/utils/Language.java +++ b/source/com/c2kernel/utils/Language.java @@ -11,11 +11,11 @@ import java.util.Hashtable; public class Language { - public static Hashtable mTableOfTranslation = new Hashtable(); + public static Hashtable mTableOfTranslation = new Hashtable(); public static Hashtable mTableOfUntranslated = new Hashtable(); public static boolean isTranlated=false; - private Hashtable tableOfTranslation = new Hashtable(); - + private Hashtable tableOfTranslation = new Hashtable(); + public static String translate(String english) { if (!isTranlated) return english; @@ -23,13 +23,13 @@ public class Language if (rep != null && !rep.equals("")) { String translated = (String) mTableOfTranslation.get(english); if (translated != null) return translated; - else + else { mTableOfUntranslated.put(english,""); try { String s = ""; - Enumeration e = mTableOfUntranslated.keys(); + Enumeration e = mTableOfUntranslated.keys(); while (e.hasMoreElements()) s =s+"\n"+e.nextElement(); FileStringUtility.string2File("untranslated.txt",s); } @@ -42,11 +42,11 @@ public class Language } return rep; } - + public Language(String filePath) - { + { String languageFile = filePath; - if (languageFile == null || languageFile.length() == 0) + if (languageFile == null || languageFile.length() == 0) // no language file defined for this process return; tableOfTranslation = FileStringUtility.loadLanguageFile(languageFile); @@ -56,7 +56,7 @@ public class Language String rep = english; if (rep != null && !rep.equals("")) { String translated = (String) tableOfTranslation.get(english); - if (translated != null) + if (translated != null) rep = translated; } return rep; diff --git a/source/com/c2kernel/utils/LocalObjectLoader.java b/source/com/c2kernel/utils/LocalObjectLoader.java old mode 100755 new mode 100644 index 620b030..8a73e3c --- a/source/com/c2kernel/utils/LocalObjectLoader.java +++ b/source/com/c2kernel/utils/LocalObjectLoader.java @@ -14,8 +14,8 @@ import com.c2kernel.process.Gateway; public class LocalObjectLoader { private static ActDefCache actCache = new ActDefCache(); - static public ItemProxy loadLocalObjectDef(String root, String name) - throws ObjectNotFoundException + static public ItemProxy loadLocalObjectDef(String root, String name) + throws ObjectNotFoundException { DomainPath defRoot = new DomainPath(root); DomainPath defPath = (DomainPath)defRoot.find(name); @@ -32,7 +32,7 @@ public class LocalObjectLoader { Logger.error(ex); throw new ObjectNotFoundException("Error loading script " + scriptName + " version " + scriptVersion, ""); } - + } static public Schema getSchema(String schemaName, int schemaVersion) throws ObjectNotFoundException { @@ -40,14 +40,14 @@ public class LocalObjectLoader { Schema thisSchema = new Schema(); thisSchema.docType = schemaName; thisSchema.docVersion = schemaVersion; - + // don't bother if this is the Schema schema - for bootstrap esp. if (schemaName.equals("Schema") && schemaVersion == 0) { thisSchema.breakApart = false; thisSchema.schema=""; return thisSchema; } - + ItemProxy schema = loadLocalObjectDef("/desc/OutcomeDesc/", schemaName); Viewpoint schemaView = (Viewpoint)schema.getObject(ClusterStorage.VIEWPOINT + "/Schema/" + schemaVersion); try { @@ -58,18 +58,18 @@ public class LocalObjectLoader { } String breakApart = schema.getProperty("BreakApart"); thisSchema.breakApart = breakApart.equals("1"); - + return thisSchema; } /** * Retrieves a named version of activity def from the database - * + * * @param actName - activity name * @param version - named version (String) * @return ActivityDef * @throws ObjectNotFoundException - When activity or version does not exist - */ + */ static public ActivityDef getActDef(String actName, String actVersion) throws ObjectNotFoundException, InvalidDataException { Logger.msg(5, "Loading activity def "+actName+" v"+actVersion); return actCache.get(actName, actVersion); diff --git a/source/com/c2kernel/utils/Logger.java b/source/com/c2kernel/utils/Logger.java index 2d4d975..45edbee 100644 --- a/source/com/c2kernel/utils/Logger.java +++ b/source/com/c2kernel/utils/Logger.java @@ -32,9 +32,9 @@ public class Logger static private void printMessage(String message, int msgLogLevel) { synchronized(logStreams) { - for (Iterator iter = logStreams.keySet().iterator(); iter.hasNext();) { - PrintStream element = (PrintStream)iter.next(); - int logLevel = ((Integer)logStreams.get(element)).intValue(); + for (Iterator iter = logStreams.keySet().iterator(); iter.hasNext();) { + PrintStream element = iter.next(); + int logLevel = logStreams.get(element).intValue(); if (logLevel < msgLogLevel || (logLevel > 9 && logLevel - 10 < msgLogLevel)) continue; if (logLevel > 9) @@ -51,7 +51,7 @@ public class Logger } } } - + static private void printMessage(Throwable ex) { StringWriter msgString = new StringWriter(); PrintWriter msg = new PrintWriter(msgString); @@ -59,7 +59,7 @@ public class Logger ex.printStackTrace(msg); printMessage(msgString.toString(), 0); } - + static public boolean doLog(int logLevel) { return mHighestLogLevel >= logLevel; @@ -67,7 +67,7 @@ public class Logger /** * Use this only for temporary messages while developing/debugging When the code is stable, change calls to debug to * message/warning/error with an appropriate log level This makes it easier to manage debug calls in the source. - * + * * @param msg - * the string to write to the console, or log file if specified in cmd line */ @@ -81,7 +81,7 @@ public class Logger } /** * Use Logger.message to report information that will be useful for debugging a release - * + * * @param level - * log level of this message. If the current log level has been on the cmd line to be less that this number, the log message * will not be displayed @@ -143,23 +143,22 @@ public class Logger if (logLevel > 9) logLevel-=10; if (logLevel > mHighestLogLevel) mHighestLogLevel = logLevel; } - + } /** * @param console */ public static void removeLogStream(PrintStream console) { synchronized(logStreams) { - Integer logIntObj = (Integer)logStreams.get(console); - if (logIntObj == null) return; // not registered + Integer logIntObj = logStreams.get(console); + if (logIntObj == null) return; // not registered int logLevel = (logIntObj).intValue(); logStreams.remove(console); - + // recalculate lowest log level if (logLevel == mHighestLogLevel || (logLevel > 9 && logLevel-10 == mHighestLogLevel)) { mHighestLogLevel = -1; - for (Iterator iter = logStreams.values().iterator(); iter.hasNext();) { - Integer element = (Integer)iter.next(); + for (Integer element : logStreams.values()) { int thisLogLevel = element.intValue()>9?element.intValue()-10:element.intValue(); if (thisLogLevel > mHighestLogLevel || mHighestLogLevel == -1) mHighestLogLevel = thisLogLevel; @@ -167,7 +166,7 @@ public class Logger } } } - + static public void initConsole(String id) { String portString = Gateway.getProperty(id+".Console.port"); @@ -177,19 +176,19 @@ public class Logger } catch (NumberFormatException ex) { Logger.msg("No port defined for "+id+" console. Using any port."); } - + mConsole = new SimpleTCPIPServer(port, ScriptConsole.class, 5); mConsole.startListening(); Gateway.setProperty(id+".Console.port", String.valueOf(mConsole.getPort())); } - + static public int getConsolePort() { return mConsole.getPort(); } - + static public void closeConsole() { if (mConsole != null) - mConsole.stopListening(); + mConsole.stopListening(); } } diff --git a/source/com/c2kernel/utils/Resource.java b/source/com/c2kernel/utils/Resource.java index 33100d8..361549d 100644 --- a/source/com/c2kernel/utils/Resource.java +++ b/source/com/c2kernel/utils/Resource.java @@ -62,7 +62,7 @@ public class Resource { static public URL getDomainResourceURL(String resName) throws MalformedURLException { return new URL(domainBaseURL, resName); } - + private static URL getURLorResURL(String newURL) { URL result; try { @@ -83,16 +83,16 @@ public class Resource { Logger.msg(8, "Resource::getTextResource() - Getting resource: " + resName); if (txtCache.containsKey(resName)) { - return (String)txtCache.get(resName); + return txtCache.get(resName); } try { - + String newRes = null; try { newRes = FileStringUtility.url2String(getDomainResourceURL(resName)); } catch (Exception ex) { } // no domain base - + if (newRes == null || newRes.length() == 0) { // not found in domain newRes = FileStringUtility.url2String(getKernelResourceURL(resName)); } @@ -104,7 +104,7 @@ public class Resource { } /** * Gets an image from the resource directories - * + * * @param resName - filename after resources/images * @return */ @@ -116,13 +116,13 @@ public class Resource { return nullImg; } } - + static public ImageIcon getImage(String resName) throws ObjectNotFoundException { if (resName == null) return nullImg; if (imgCache.containsKey(resName)) { - return (ImageIcon)imgCache.get(resName); + return imgCache.get(resName); } URL imgLocation = null; @@ -134,7 +134,7 @@ public class Resource { newImg = new ImageIcon(imgLocation); } catch (MalformedURLException e) { } } - + // try kernel resources next if (newImg == null || newImg.getIconHeight() == -1) { try { @@ -142,12 +142,12 @@ public class Resource { newImg = new ImageIcon(imgLocation); } catch (MalformedURLException e) { } } - + // else return null image if (newImg == null || newImg.getIconHeight() == -1) { throw new ObjectNotFoundException(); } - + else imgCache.put(resName, newImg); Logger.msg(7, "Loaded "+resName+" "+newImg.getIconWidth()+"x"+newImg.getIconHeight()); return newImg; @@ -175,13 +175,13 @@ public class Resource { return "Domain application version not found"; } } - + static public String getKernelVersion() { try { return FileStringUtility.url2String(getKernelResourceURL("textFiles/version.txt")); } catch (Exception ex) { return "No version info found"; } - + } } diff --git a/source/com/c2kernel/utils/SoftCache.java b/source/com/c2kernel/utils/SoftCache.java index 6680f30..9c95f2e 100644 --- a/source/com/c2kernel/utils/SoftCache.java +++ b/source/com/c2kernel/utils/SoftCache.java @@ -2,12 +2,16 @@ package com.c2kernel.utils; import java.lang.ref.ReferenceQueue; import java.lang.ref.SoftReference; -import java.util.*; +import java.util.AbstractMap; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.Map; +import java.util.Set; /******************************************************************************* * SoftReferences are reaped if no strong references are left and the vm is * running out of memory. Most caches in the kernel use this. - * + * * $Revision: 1.5 $ $Date: 2004/10/29 13:29:09 $ ******************************************************************************/ public class SoftCache extends AbstractMap { @@ -43,7 +47,8 @@ public class SoftCache extends AbstractMap { return result; } - public V put(K key, V value) { + @Override + public V put(K key, V value) { processQueue(); if (minSize > 0) { hardCache.addFirst(value); @@ -54,33 +59,38 @@ public class SoftCache extends AbstractMap { return value; } - public V remove(Object key) { + @Override + public V remove(Object key) { processQueue(); return hash.remove(key).get(); } - public void clear() { + @Override + public void clear() { hardCache.clear(); while(queue.poll()!=null); hash.clear(); } - public int size() { + @Override + public int size() { processQueue(); return hash.size(); } - - public Set keySet() { + + @Override + public Set keySet() { processQueue(); return hash.keySet(); } - public Set> entrySet() { + @Override + public Set> entrySet() { // Would have to create another Map to do this - too expensive // Throwing runtime expensive is dangerous, but better than nulls throw new UnsupportedOperationException(); - } - + } + private static class SoftValue extends SoftReference { private final Object key; private SoftValue(Object key, V value, ReferenceQueue q) { @@ -88,15 +98,15 @@ public class SoftCache extends AbstractMap { this.key = key; } } - + /** * Look for values that have been reaped, and remove their keys from the cache */ private void processQueue() { - SoftValue sv; - while ((sv = (SoftValue) queue.poll()) != null) { + SoftValue sv; + while ((sv = (SoftValue) queue.poll()) != null) { hash.remove(sv.key); } } - + } diff --git a/source/com/c2kernel/utils/TransientCache.java b/source/com/c2kernel/utils/TransientCache.java index 8991b87..d58617e 100644 --- a/source/com/c2kernel/utils/TransientCache.java +++ b/source/com/c2kernel/utils/TransientCache.java @@ -1,9 +1,14 @@ package com.c2kernel.utils; -import java.lang.ref.*; -import java.util.*; +import java.lang.ref.Reference; +import java.util.AbstractMap; +import java.util.AbstractSet; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; /************************************************************************** - * TransientCache - Uses transient references to allow unused entries to be + * TransientCache - Uses transient references to allow unused entries to be * reaped by the java garbage collector. * * $Revision: 1.1 $ @@ -13,10 +18,11 @@ import java.util.*; * All rights reserved. **************************************************************************/ public abstract class TransientCache extends AbstractMap { - + private Map> map = new Hashtable>(); - - public synchronized Set> entrySet() { + + @Override + public synchronized Set> entrySet() { Map newMap = new Hashtable(); Iterator>> iter = map.entrySet().iterator(); while (iter.hasNext()) { @@ -24,28 +30,30 @@ public abstract class TransientCache extends AbstractMap { Reference ref = me.getValue(); V o = ref.get(); if (o == null) { - // Delete cleared reference + // Delete cleared reference iter.remove(); } else { - // Copy out interior object + // Copy out interior object newMap.put(me.getKey(), o); } } - // Return set of interior objects + // Return set of interior objects return newMap.entrySet(); } - - public synchronized V put(K key, V value) { + + @Override + public synchronized V put(K key, V value) { Reference ref = makeReference(value); - ref = (Reference)map.put(key, ref); + ref = map.put(key, ref); if (ref != null) return (ref.get()); return null; } - + public abstract Reference makeReference(Object value); - - public V remove(Object key) { + + @Override + public V remove(Object key) { Iterator>> i = map.entrySet().iterator(); Entry> correctEntry = null; if (key == null) { @@ -72,38 +80,46 @@ public abstract class TransientCache extends AbstractMap { /** * */ - public void clear() { + @Override + public void clear() { map.entrySet().clear(); } - + private transient Set keySet = null; - - public Set keySet() { + + @Override + public Set keySet() { if (keySet == null) { keySet = new AbstractSet() { - public Iterator iterator() { + @Override + public Iterator iterator() { return new Iterator() { private Iterator>> i = map.entrySet().iterator(); - public boolean hasNext() { + @Override + public boolean hasNext() { return i.hasNext(); } - public K next() { + @Override + public K next() { return i.next().getKey(); } - public void remove() { + @Override + public void remove() { i.remove(); } }; } - public int size() { + @Override + public int size() { return TransientCache.this.size(); } - public boolean contains(Object k) { + @Override + public boolean contains(Object k) { return TransientCache.this.containsKey(k); } }; diff --git a/source/com/c2kernel/utils/XmlElementParser.java b/source/com/c2kernel/utils/XmlElementParser.java index 0f138d3..69cee31 100644 --- a/source/com/c2kernel/utils/XmlElementParser.java +++ b/source/com/c2kernel/utils/XmlElementParser.java @@ -24,7 +24,7 @@ public class XmlElementParser return parseOld(data, xpath); } } - + public static String[] parseOld(String data, String path) { Vector returnData = new Vector(); @@ -41,13 +41,13 @@ public class XmlElementParser int i=taille; while (pathTokens.hasMoreElements()) pathElements[--i] = pathTokens.nextToken(); - + if (Logger.doLog(6)) { Logger.msg(6, "Path elements:"); - for (int x=0;x= 0) + if (split >= 0) headers.put( headerLine.substring(0, split), headerLine.substring(split+2) @@ -81,10 +86,10 @@ public class HTTPRequestHandler implements SocketHandler { String response = null; try { - + if (headers.containsKey("Content-length")) { // read POST data StringBuffer postBuffer = new StringBuffer(); - int received = 0; int length = Integer.parseInt((String)headers.get("Content-length")); + int received = 0; int length = Integer.parseInt(headers.get("Content-length")); try { while (received < length) { String postLine = request.readLine(); @@ -98,7 +103,7 @@ public class HTTPRequestHandler implements SocketHandler { } } // Got the params, generate response - + returnMIME = "text/xml"; statusCode = "200 OK"; @@ -109,47 +114,47 @@ public class HTTPRequestHandler implements SocketHandler { System.out.println(new Date().toString()+" "+currentSocket.getInetAddress()+" "+method+" "+resource+" "+statusCode); OutputStream output = currentSocket.getOutputStream(); - + statusCode = "HTTP/1.0 "+statusCode+CRLF; output.write(statusCode.getBytes()); - + returnMIME = "Content-type: "+returnMIME+CRLF; output.write(returnMIME.getBytes()); - + String contentLength = "Content-Length: "+response.length()+CRLF; output.write(contentLength.getBytes()); - + // Possible: last mod? // end of headers output.write(CRLF.getBytes()); - + // write the content output.write(response.getBytes()); request.close(); output.close(); currentSocket.close(); - } catch (IOException ex2) { + } catch (IOException ex2) { Logger.error(ex2); } // aborted connection probably currentSocket = null; } - + /* This is a dummy method that doesn't support anything. * Override it. */ - + public String processRequest() { return error("501 Not Implemented", "The method "+method+" you have requested is not supported by this server."); } - + public String error(String code, String desc) { statusCode = code; returnMIME = "text/html"; - return ("" + + return ("" + ""+code+"" + "

"+code+"

" + "

"+desc+ "


Cristal Item HTTP server"); } } - + diff --git a/source/com/c2kernel/utils/server/SimpleTCPIPServer.java b/source/com/c2kernel/utils/server/SimpleTCPIPServer.java index 8db9257..930fcee 100644 --- a/source/com/c2kernel/utils/server/SimpleTCPIPServer.java +++ b/source/com/c2kernel/utils/server/SimpleTCPIPServer.java @@ -1,11 +1,9 @@ package com.c2kernel.utils.server; -import java.io.InputStream; import java.io.InterruptedIOException; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; -import java.util.Iterator; import java.util.ListIterator; import java.util.NoSuchElementException; @@ -17,13 +15,13 @@ public class SimpleTCPIPServer implements Runnable int port = 0; int maxConn = 10; Thread listener = null; - Class handlerClass = null; + Class handlerClass = null; ServerSocket serverSocket = null; boolean keepListening = true; ArrayList currentHandlers = new ArrayList(); static short noServers = 0; - public SimpleTCPIPServer(int port, Class handlerClass, int maxConnections) + public SimpleTCPIPServer(int port, Class handlerClass, int maxConnections) { this.port = port; this.handlerClass = handlerClass; @@ -35,26 +33,25 @@ public class SimpleTCPIPServer implements Runnable { if(listener != null) return; keepListening = true; - + listener = new Thread(this); listener.start(); } - + public void stopListening() { Logger.msg("SimpleTCPIPServer: Closing server for " + handlerClass.getName() +" on port "+ port); keepListening = false; - for (Iterator iter = currentHandlers.iterator(); iter.hasNext();) { - SocketHandler thisHandler = (SocketHandler)iter.next(); + for (SocketHandler thisHandler : currentHandlers) { thisHandler.shutdown(); } } - public void run() + @Override + public void run() { Thread.currentThread().setName("TCP/IP Server for "+handlerClass.getName()); Socket connectionSocket = null; - InputStream inputStream = null; try { serverSocket = new ServerSocket(port); @@ -64,11 +61,11 @@ public class SimpleTCPIPServer implements Runnable serverSocket.setSoTimeout(500); SocketHandler freeHandler = null; while(keepListening) { - if (freeHandler == null || freeHandler.isBusy()) { - ListIterator i = currentHandlers.listIterator(); + if (freeHandler == null || freeHandler.isBusy()) { + ListIterator i = currentHandlers.listIterator(); try { do { - freeHandler = (SocketHandler)i.next(); + freeHandler = i.next(); } while (freeHandler.isBusy()); } catch (NoSuchElementException e) { // create new one @@ -105,7 +102,7 @@ public class SimpleTCPIPServer implements Runnable listener = null; Logger.msg("SimpleTCPIPServer - Servers still running: "+--noServers); } - + public int getPort() { return port; } diff --git a/source/com/c2kernel/utils/server/SocketHandler.java b/source/com/c2kernel/utils/server/SocketHandler.java old mode 100755 new mode 100644 index 455a9bd..8d37714 --- a/source/com/c2kernel/utils/server/SocketHandler.java +++ b/source/com/c2kernel/utils/server/SocketHandler.java @@ -3,13 +3,13 @@ package com.c2kernel.utils.server; import java.net.Socket; public interface SocketHandler extends Runnable { - + public String getName(); - + public boolean isBusy(); - + public void setSocket(Socket newSocket); - + public void shutdown(); } - + diff --git a/source/com/c2kernel/utils/server/UDPListener.java b/source/com/c2kernel/utils/server/UDPListener.java old mode 100755 new mode 100644 index 1f02361..3b1fc9d --- a/source/com/c2kernel/utils/server/UDPListener.java +++ b/source/com/c2kernel/utils/server/UDPListener.java @@ -18,15 +18,16 @@ import com.c2kernel.utils.Logger; **************************************************************************/ public abstract class UDPListener extends Thread { - + private boolean active = true; protected DatagramSocket socket; - + public UDPListener() { super(); } - - public void run() { + + @Override + public void run() { Thread.currentThread().setName("UDP Server"); byte[] buffer = new byte[255]; DatagramPacket newPacket = new DatagramPacket(buffer, buffer.length); @@ -44,10 +45,10 @@ public abstract class UDPListener extends Thread { } socket.close(); } - + protected abstract void processPacket(DatagramPacket packet) throws InvalidDataException; - + public void shutdown() { - active = false; + active = false; } } -- cgit v1.2.3