You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by lr...@apache.org on 2008/12/05 22:06:33 UTC

svn commit: r723868 - in /tuscany/branches/sca-java-1.4/modules/contribution-impl/src: main/ main/java/org/apache/tuscany/sca/contribution/service/impl/ test/java/org/apache/tuscany/sca/contribution/service/ test/java/org/apache/tuscany/sca/contributio...

Author: lresende
Date: Fri Dec  5 13:06:32 2008
New Revision: 723868

URL: http://svn.apache.org/viewvc?rev=723868&view=rev
Log:
Merging changes to delay initialization of Contribution repository to avoid creation of target directory. No refactoring or removal of obsolete code was done to maintain backward compatibility.

Added:
    tuscany/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/service/
    tuscany/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/service/impl/
    tuscany/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryTestCase.java
      - copied unchanged from r723588, tuscany/branches/sca-java-1.x/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryTestCase.java
    tuscany/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/service/impl/PackageTypeDescriberImplTestCase.java
      - copied unchanged from r723588, tuscany/branches/sca-java-1.x/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/service/impl/PackageTypeDescriberImplTestCase.java
Removed:
    tuscany/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/services/
Modified:
    tuscany/branches/sca-java-1.4/modules/contribution-impl/src/main/   (props changed)
    tuscany/branches/sca-java-1.4/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java

Propchange: tuscany/branches/sca-java-1.4/modules/contribution-impl/src/main/
------------------------------------------------------------------------------
--- svn:mergeinfo (added)
+++ svn:mergeinfo Fri Dec  5 13:06:32 2008
@@ -0,0 +1,2 @@
+/tuscany/branches/sca-java-1.3/modules/contribution-impl/src/main:671193
+/tuscany/branches/sca-java-1.x/modules/contribution-impl/src/main:723588

Modified: tuscany/branches/sca-java-1.4/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.4/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java?rev=723868&r1=723867&r2=723868&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.4/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java (original)
+++ tuscany/branches/sca-java-1.4/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java Fri Dec  5 13:06:32 2008
@@ -65,7 +65,9 @@
 public class ContributionRepositoryImpl implements ContributionRepository {
     private static final String NS = "http://tuscany.apache.org/xmlns/1.0-SNAPSHOT";
     private static final String DOMAIN_INDEX_FILENAME = "sca-domain.xml";
-    private final File rootFile;
+    private boolean initialized = false;
+    private String repository = null;
+    private File rootFile = null;
     private Map<String, String> contributionLocations = new HashMap<String, String>();
     
     private Map<String, Contribution> contributionMap = new HashMap<String, Contribution>();
@@ -125,97 +127,25 @@
      */
     public ContributionRepositoryImpl(final String repository, XMLInputFactory factory, Monitor monitor) throws IOException {
         this.monitor = monitor;
-    	String root = repository;
-        if (repository == null) {
-            root = AccessController.doPrivileged(new PrivilegedAction<String>() {
-                public String run() {
-                    // Default to <user.home>/.tuscany/domains/local/
-                    String userHome = System.getProperty("user.home");
-                    String slash = File.separator;
-                    return userHome + slash + ".tuscany" + slash + "domains" + slash + "local" + slash;
-                }
-            });
-        }
-
-        // Allow privileged access to File. Requires FilePermission in security policy file.
-        final String finalRoot = root;
-        this.rootFile = AccessController.doPrivileged(new PrivilegedAction<File>() {
-            public File run() {
-                return new File(finalRoot);
-            }
-        });           
-
-        // Allow privileged access to File. Requires FilePermission in security policy file.
-        this.domain = AccessController.doPrivileged(new PrivilegedAction<URI>() {
-            public URI run() {
-                return rootFile.toURI();
-            }
-        });           
-
-        // Allow privileged access to mkdir. Requires FilePermission in security policy file.
-        try {
-            AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
-                public Object run() throws IOException {
-                    FileHelper.forceMkdir(rootFile);
-                    return null;
-                }
-            });
-        } catch (PrivilegedActionException e) {
-        	error("PrivilegedActionException", rootFile, (IOException)e.getException());
-            throw (IOException)e.getException();
-        }
-            
-        // Allow privileged access to test file. Requires FilePermissions in security policy file.
-        Boolean notDirectory = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
-            public Boolean run() {
-                return (!rootFile.exists() || !rootFile.isDirectory() || !rootFile.canRead());
-            }
-        });           
-        if (notDirectory) {
-        	error("RootNotDirectory", rootFile, repository);
-            throw new IOException("The root is not a directory: " + repository);
-        }
+        this.repository = repository;
         this.factory = factory;
     }
 
+    
     public URI getDomain() {
         return domain;
     }
 
-    /**
-     * Resolve contribution location in the repository -> root repository /
-     * contribution file -> contribution group id / artifact id / version
-     * 
-     * @param contribution
-     * @return
-     */
-    private File mapToFile(URL sourceURL) {
-        String fileName = FileHelper.toFile(sourceURL).getName();
-        return new File(rootFile, "contributions" + File.separator + fileName);
-    }
-
-    /**
-     * Write a specific source InputStream to a file on disk
-     * 
-     * @param source contents of the file to be written to disk
-     * @param target file to be written
-     * @throws IOException
-     */
-    public static void copy(InputStream source, File target) throws IOException {
-        BufferedOutputStream out = null;
-        BufferedInputStream in = null;
-
-        try {
-            out = new BufferedOutputStream(new FileOutputStream(target));
-            in = new BufferedInputStream(source);
-            IOHelper.copy(in, out);
-        } finally {
-            IOHelper.closeQuietly(out);
-            IOHelper.closeQuietly(in);
-        }
-    }
-
     public URL store(final String contribution, URL sourceURL, InputStream contributionStream) throws IOException {
+    	if(! initialized) {
+    		try {
+    			initializeRepository();
+    		} catch(Exception e) {
+    			//ignore
+    		}
+    	}
+
+    	
         // where the file should be stored in the repository
         final File location = mapToFile(sourceURL);
         FileHelper.forceMkdir(location.getParentFile());
@@ -244,6 +174,14 @@
     }
 
     public URL store(String contribution, URL sourceURL) throws IOException {
+    	if(! initialized) {
+    		try {
+    			initializeRepository();
+    		} catch(Exception e) {
+    			//ignore
+    		}
+    	}
+    	
         // where the file should be stored in the repository
         File location = mapToFile(sourceURL);
         File source = FileHelper.toFile(sourceURL);
@@ -270,6 +208,15 @@
     }
 
     public URL find(String contribution) {
+    	if(! initialized) {
+    		try {
+    			initializeRepository();
+    		} catch(Exception e) {
+    			//ignore
+    		}
+    	}
+
+
         if (contribution == null) {
             return null;
         }
@@ -287,6 +234,15 @@
     }
 
     public void remove(String contribution) {
+    	if(! initialized) {
+    		try {
+    			initializeRepository();
+    		} catch(Exception e) {
+    			//ignore
+    		}
+    	}
+
+
         URL contributionURL = this.find(contribution);
         if (contributionURL != null) {
             // remove
@@ -304,8 +260,147 @@
         return new ArrayList<String>(contributionLocations.keySet());
     }
 
-    public void init() {
-        File domainFile = new File(rootFile, "sca-domain.xml");
+	/**
+	 * Contribution Registry methods
+	 */
+	    
+    
+    public void addContribution(Contribution contribution) {
+        contributionMap.put(contribution.getURI(), contribution);
+        contributions.add(contribution);
+    }
+    
+    public void removeContribution(Contribution contribution) {
+        contributionMap.remove(contribution.getURI());
+        contributions.remove(contribution);
+    }
+    
+    public void updateContribution(Contribution contribution) {
+        Contribution oldContribution = contributionMap.remove(contribution.getURI());
+        contributions.remove(oldContribution);
+        contributionMap.put(contribution.getURI(), contribution);
+        contributions.add(contribution);
+    }
+    
+    public Contribution getContribution(String uri) {
+        return contributionMap.get(uri);
+    }
+    
+    public List<Contribution> getContributions() {
+        return Collections.unmodifiableList(contributions);
+    }
+
+    
+    /**
+     * Resolve contribution location in the repository -> root repository /
+     * contribution file -> contribution group id / artifact id / version
+     * 
+     * @param contribution
+     * @return
+     */
+    private File mapToFile(URL sourceURL) {
+        String fileName = FileHelper.toFile(sourceURL).getName();
+        return new File(rootFile, "contributions" + File.separator + fileName);
+    }
+    
+
+    /**
+     * Persist contribution state to xml file in the repository
+     */
+    private void saveMap() {
+        File domainFile = new File(rootFile, DOMAIN_INDEX_FILENAME);
+        FileOutputStream os = null;
+        try {
+            os = new FileOutputStream(domainFile);
+            PrintWriter writer = new PrintWriter(new OutputStreamWriter(os, "UTF-8"));
+            writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+            writer.println("<domain uri=\"" + getDomain() + "\" xmlns=\"" + NS + "\">");
+            for (Map.Entry<String, String> e : contributionLocations.entrySet()) {
+                writer.println("    <contribution uri=\"" + e.getKey() + "\" location=\"" + e.getValue() + "\"/>");
+            }
+            writer.println("</domain>");
+            writer.flush();
+        } catch (IOException e) {
+        	IllegalArgumentException ae = new IllegalArgumentException(e);
+        	error("IllegalArgumentException", os, ae);
+            throw ae;
+        } finally {
+            IOHelper.closeQuietly(os);
+        }
+    }    
+    
+    /**
+     * Initialize contribution repository
+     * @throws IOException
+     */
+    private void initializeRepository() throws IOException {
+    	String root = this.repository;
+        if (root == null) {
+            root = AccessController.doPrivileged(new PrivilegedAction<String>() {
+                public String run() {
+                    // Default to <user.home>/.tuscany/domains/local/
+                    String userHome = System.getProperty("user.home");
+                    String slash = File.separator;
+                    return userHome + slash + ".tuscany" + slash + "domains" + slash + "local" + slash;
+                }
+            });
+        }
+
+        // Allow privileged access to File. Requires FilePermission in security policy file.
+        final String finalRoot = root;
+        this.rootFile = AccessController.doPrivileged(new PrivilegedAction<File>() {
+            public File run() {
+                return new File(finalRoot);
+            }
+        });           
+
+        // Allow privileged access to File. Requires FilePermission in security policy file.
+        this.domain = AccessController.doPrivileged(new PrivilegedAction<URI>() {
+            public URI run() {
+                return rootFile.toURI();
+            }
+        });           
+
+        // Allow privileged access to mkdir. Requires FilePermission in security policy file.
+        try {
+            AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
+                public Object run() throws IOException {
+                    FileHelper.forceMkdir(rootFile);
+                    return null;
+                }
+            });
+        } catch (PrivilegedActionException e) {
+        	error("PrivilegedActionException", rootFile, (IOException)e.getException());
+            throw (IOException)e.getException();
+        }
+            
+        // Allow privileged access to test file. Requires FilePermissions in security policy file.
+        Boolean notDirectory = AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
+            public Boolean run() {
+                return (!rootFile.exists() || !rootFile.isDirectory() || !rootFile.canRead());
+            }
+        });           
+        if (notDirectory) {
+        	error("RootNotDirectory", rootFile, repository);
+            throw new IOException("The root is not a directory: " + repository);
+        }
+
+    }
+    
+
+    /**
+     * 
+     */
+    void init() {
+    	if(! initialized) {
+    		try {
+    			initializeRepository();
+    		} catch(Exception e) {
+    			//ignore
+    		}
+    	}
+
+    	File domainFile = new File(rootFile, "sca-domain.xml");
         if (!domainFile.isFile()) {
             return;
         }
@@ -346,54 +441,29 @@
         }
     }
 
-    private void saveMap() {
-        File domainFile = new File(rootFile, DOMAIN_INDEX_FILENAME);
-        FileOutputStream os = null;
+    /**
+     * Utility functions
+     */
+
+    /**
+     * Write a specific source InputStream to a file on disk
+     * 
+     * @param source contents of the file to be written to disk
+     * @param target file to be written
+     * @throws IOException
+     */
+    private static void copy(InputStream source, File target) throws IOException {
+        BufferedOutputStream out = null;
+        BufferedInputStream in = null;
+
         try {
-            os = new FileOutputStream(domainFile);
-            PrintWriter writer = new PrintWriter(new OutputStreamWriter(os, "UTF-8"));
-            writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-            writer.println("<domain uri=\"" + getDomain() + "\" xmlns=\"" + NS + "\">");
-            for (Map.Entry<String, String> e : contributionLocations.entrySet()) {
-                writer.println("    <contribution uri=\"" + e.getKey() + "\" location=\"" + e.getValue() + "\"/>");
-            }
-            writer.println("</domain>");
-            writer.flush();
-        } catch (IOException e) {
-        	IllegalArgumentException ae = new IllegalArgumentException(e);
-        	error("IllegalArgumentException", os, ae);
-            throw ae;
+            out = new BufferedOutputStream(new FileOutputStream(target));
+            in = new BufferedInputStream(source);
+            IOHelper.copy(in, out);
         } finally {
-            IOHelper.closeQuietly(os);
+            IOHelper.closeQuietly(out);
+            IOHelper.closeQuietly(in);
         }
     }
-
-    public void destroy() {
-    }
-    
-    public void addContribution(Contribution contribution) {
-        contributionMap.put(contribution.getURI(), contribution);
-        contributions.add(contribution);
-    }
-    
-    public void removeContribution(Contribution contribution) {
-        contributionMap.remove(contribution.getURI());
-        contributions.remove(contribution);
-    }
-    
-    public void updateContribution(Contribution contribution) {
-        Contribution oldContribution = contributionMap.remove(contribution.getURI());
-        contributions.remove(oldContribution);
-        contributionMap.put(contribution.getURI(), contribution);
-        contributions.add(contribution);
-    }
-    
-    public Contribution getContribution(String uri) {
-        return contributionMap.get(uri);
-    }
-    
-    public List<Contribution> getContributions() {
-        return Collections.unmodifiableList(contributions);
-    }
     
 }