summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-1.4/modules
diff options
context:
space:
mode:
authorlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2008-12-05 21:06:32 +0000
committerlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2008-12-05 21:06:32 +0000
commit592d4446a5c63ecd06eea498ef63bd6b8ff10766 (patch)
tree610cb69c5c53858bacfe7e6975991551adb5b368 /branches/sca-java-1.4/modules
parentabbdc6f40c541af57deaf545669c1f72443fad37 (diff)
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.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@723868 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r--branches/sca-java-1.4/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java332
-rw-r--r--branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryTestCase.java (renamed from branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/services/ContributionRepositoryTestCase.java)2
-rw-r--r--branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/service/impl/PackageTypeDescriberImplTestCase.java (renamed from branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/services/PackageTypeDescriberImplTestCase.java)2
3 files changed, 203 insertions, 133 deletions
diff --git a/branches/sca-java-1.4/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java b/branches/sca-java-1.4/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java
index 9375cb917f..d567aa5c68 100644
--- a/branches/sca-java-1.4/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java
+++ b/branches/sca-java-1.4/modules/contribution-impl/src/main/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryImpl.java
@@ -65,7 +65,9 @@ import org.apache.tuscany.sca.monitor.Problem.Severity;
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 class ContributionRepositoryImpl implements ContributionRepository {
*/
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 class ContributionRepositoryImpl implements ContributionRepository {
}
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 class ContributionRepositoryImpl implements ContributionRepository {
}
public URL find(String contribution) {
+ if(! initialized) {
+ try {
+ initializeRepository();
+ } catch(Exception e) {
+ //ignore
+ }
+ }
+
+
if (contribution == null) {
return null;
}
@@ -287,6 +234,15 @@ public class ContributionRepositoryImpl implements ContributionRepository {
}
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 @@ public class ContributionRepositoryImpl implements ContributionRepository {
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 @@ public class ContributionRepositoryImpl implements ContributionRepository {
}
}
- 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);
- }
}
diff --git a/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/services/ContributionRepositoryTestCase.java b/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryTestCase.java
index 2e5354fb96..a90f5b36ad 100644
--- a/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/services/ContributionRepositoryTestCase.java
+++ b/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/service/impl/ContributionRepositoryTestCase.java
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.tuscany.sca.contribution.services;
+package org.apache.tuscany.sca.contribution.service.impl;
import java.io.File;
import java.io.InputStream;
diff --git a/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/services/PackageTypeDescriberImplTestCase.java b/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/service/impl/PackageTypeDescriberImplTestCase.java
index dfb600153e..49e9cc166b 100644
--- a/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/services/PackageTypeDescriberImplTestCase.java
+++ b/branches/sca-java-1.4/modules/contribution-impl/src/test/java/org/apache/tuscany/sca/contribution/service/impl/PackageTypeDescriberImplTestCase.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.tuscany.sca.contribution.services;
+package org.apache.tuscany.sca.contribution.service.impl;
import java.net.URL;