From: <jn...@us...> - 2010-06-22 12:15:41
|
Revision: 6212 http://genoviz.svn.sourceforge.net/genoviz/?rev=6212&view=rev Author: jnicol Date: 2010-06-22 12:14:30 +0000 (Tue, 22 Jun 2010) Log Message: ----------- Improve synchronization and logging. Modified Paths: -------------- trunk/genometryImpl/src/com/affymetrix/genometryImpl/das/DasServerInfo.java trunk/genometryImpl/src/com/affymetrix/genometryImpl/das/DasSource.java Modified: trunk/genometryImpl/src/com/affymetrix/genometryImpl/das/DasServerInfo.java =================================================================== --- trunk/genometryImpl/src/com/affymetrix/genometryImpl/das/DasServerInfo.java 2010-06-22 11:42:42 UTC (rev 6211) +++ trunk/genometryImpl/src/com/affymetrix/genometryImpl/das/DasServerInfo.java 2010-06-22 12:14:30 UTC (rev 6212) @@ -92,12 +92,19 @@ * see DAS specification for returned XML format in response to "dsn" command: * http://biodas.org/documents/spec.html */ - private void initialize() { + private boolean initialize() { InputStream stream = null; try { - System.out.println("Das Request: " + getLoadURL()); + Logger.getLogger(this.getClass().getName()).log( + Level.INFO, "Das Request: {0}", getLoadURL()); + Map<String, List<String>> headers = new HashMap<String, List<String>>(); stream = LocalUrlCacher.getInputStream(getLoadURL(), true, null, headers); + if (stream == null) { + Logger.getLogger(this.getClass().getName()).log( + Level.SEVERE, "Could not find URL {0}", getLoadURL()); + return false; + } List<String> list; String das_version = ""; @@ -125,8 +132,9 @@ Document doc = XMLUtils.getDocument(stream); NodeList dsns = doc.getElementsByTagName("DSN"); - System.out.println("dsn count: " + dsns.getLength()); - for (int i = 0; i < dsns.getLength(); i++) { + int dsnLength = dsns.getLength(); + System.out.println("dsn count: " + dsnLength); + for (int i = 0; i < dsnLength; i++) { Element dsn = (Element) dsns.item(i); try { parseDSNElement(dsn); @@ -139,11 +147,12 @@ } catch (Exception ex) { System.out.println("Error initializing DAS server info for\n" + serverURL); ex.printStackTrace(); - return; + return false; } finally { GeneralUtils.safeClose(stream); } initialized = true; + return true; } private void parseDSNElement(Element dsn) throws DOMException { @@ -171,15 +180,18 @@ try { URL masterURL = new URL(master_url); if (DasSource.getID(masterURL).isEmpty()) { - Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "Skipping " + sourceid + " as MAPMASTER could not be parsed"); + Logger.getLogger(this.getClass().getName()).log( + Level.WARNING, "Skipping {0} as MAPMASTER could not be parsed", sourceid); return; } DasSource das_source = sources.get(DasSource.getID(masterURL)); - if (das_source == null) { - das_source = new DasSource(serverURL, masterURL, primaryURL); - sources.put(DasSource.getID(masterURL), das_source); + synchronized (this) { + if (das_source == null) { + das_source = new DasSource(serverURL, masterURL, primaryURL); + sources.put(DasSource.getID(masterURL), das_source); + } + das_source.add(sourceid); } - das_source.add(sourceid); } catch (MalformedURLException ex) { Logger.getLogger(this.getClass().getName()).log(Level.WARNING, "", ex); } Modified: trunk/genometryImpl/src/com/affymetrix/genometryImpl/das/DasSource.java =================================================================== --- trunk/genometryImpl/src/com/affymetrix/genometryImpl/das/DasSource.java 2010-06-22 11:42:42 UTC (rev 6211) +++ trunk/genometryImpl/src/com/affymetrix/genometryImpl/das/DasSource.java 2010-06-22 12:14:30 UTC (rev 6212) @@ -97,7 +97,7 @@ return entry_points; } - public synchronized Set<DasType> getTypes() { + public Set<DasType> getTypes() { if (!types_initialized) { initTypes(); } @@ -105,16 +105,18 @@ } /** Get entry points from das server. */ - private synchronized boolean initEntryPoints() { + private boolean initEntryPoints() { InputStream stream = null; try { URL entryURL; - if(primary == null) + if(primary == null) { entryURL = new URL(master, master.getPath() + "/" + ENTRY_POINTS); - else + } + else { entryURL = new URL(primary,id + "/" + ENTRY_POINTS + XML); + } - System.out.println("Das Entry Request: " + entryURL); + Logger.getLogger(this.getClass().getName()).log(Level.INFO, "Das Entry Request: {0}", entryURL); stream = LocalUrlCacher.getInputStream(entryURL); if (stream == null) { Logger.getLogger(this.getClass().getName()).log( @@ -123,23 +125,7 @@ } Document doc = XMLUtils.getDocument(stream); NodeList segments = doc.getElementsByTagName("SEGMENT"); - int length = segments.getLength(); - System.out.println("segments: " + length); - for (int i = 0; i < length; i++) { - Element seg = (Element) segments.item(i); - String segid = seg.getAttribute("id"); - String stopstr = seg.getAttribute("stop"); - String sizestr = seg.getAttribute("size"); // can optionally use "size" instead of "start" and "stop" - - int stop = 1; - if (stopstr != null && !stopstr.isEmpty()) { - stop = Integer.parseInt(stopstr); - } else if (sizestr != null) { - stop = Integer.parseInt(sizestr); - } - getGenome().addSeq(segid, stop); - entry_points.add(segid); - } + addSegments(segments); } catch (MalformedURLException ex) { ErrorHandler.errorPanel("Error initializing DAS entry points for\n" + getID() + " on " + server, ex); } catch (ParserConfigurationException ex) { @@ -150,12 +136,35 @@ ErrorHandler.errorPanel("Error initializing DAS entry points for\n" + getID() + " on " + server, ex); } finally { GeneralUtils.safeClose(stream); - entries_initialized = true; // set even if there's an error + synchronized(this) { + entries_initialized = true; // set even if there's an error? + } } return true; } - private synchronized void initTypes() { + private void addSegments(NodeList segments) throws NumberFormatException { + int length = segments.getLength(); + Logger.getLogger(this.getClass().getName()).log(Level.FINE, "segments: {0}", length); + for (int i = 0; i < length; i++) { + Element seg = (Element) segments.item(i); + String segid = seg.getAttribute("id"); + String stopstr = seg.getAttribute("stop"); + String sizestr = seg.getAttribute("size"); // can optionally use "size" instead of "start" and "stop" + int stop = 1; + if (stopstr != null && !stopstr.isEmpty()) { + stop = Integer.parseInt(stopstr); + } else if (sizestr != null) { + stop = Integer.parseInt(sizestr); + } + synchronized (this) { + getGenome().addSeq(segid, stop); + entry_points.add(segid); + } + } + } + + private void initTypes() { Set<String> badSources = new HashSet<String>(); for (String source : sources) { @@ -164,10 +173,12 @@ } } /* Remove any failed sources */ - for (String source : badSources) { - sources.remove(source); + synchronized (this) { + for (String source : badSources) { + sources.remove(source); + } + types_initialized = true; } - types_initialized = true; } private boolean initType(String source) { @@ -177,7 +188,7 @@ URL typesURL = new URL(server, source + "/" + TYPES); URL testMasterURL = new URL(master, master.getPath() + "/" + TYPES); - System.out.println("Das Types Request: " + loadURL); + Logger.getLogger(this.getClass().getName()).log(Level.INFO, "Das Types Request: {0}", loadURL); stream = LocalUrlCacher.getInputStream(loadURL); if (stream == null) { Logger.getLogger(this.getClass().getName()).log( @@ -187,14 +198,17 @@ Document doc = XMLUtils.getDocument(stream); NodeList typelist = doc.getElementsByTagName("TYPE"); int typeLength = typelist.getLength(); - System.out.println("types: " + typeLength); + Logger.getLogger(this.getClass().getName()).log(Level.FINE, "types: {0}", typeLength); for (int i = 0; i < typeLength; i++) { Element typenode = (Element) typelist.item(i); String typeid = typenode.getAttribute("id"); /* URL.equals() does DNS lookups! */ String name = URLEquals(typesURL, testMasterURL) ? null : source + "/" + typeid; - types.add(new DasType(server, typeid, source, name)); + DasType type = new DasType(server, typeid, source, name); + synchronized(this) { + types.add(type); + } } } catch (MalformedURLException ex) { ErrorHandler.errorPanel("Error initializing DAS types for\n" + getID() + " on " + server, ex); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |