KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectstyle > cayenne > project > ProjectConfiguration


1 /* ====================================================================
2  *
3  * The ObjectStyle Group Software License, version 1.1
4  * ObjectStyle Group - http://objectstyle.org/
5  *
6  * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
7  * of the software. All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if any,
22  * must include the following acknowlegement:
23  * "This product includes software developed by independent contributors
24  * and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
29  * or promote products derived from this software without prior written
30  * permission. For written permission, email
31  * "andrus at objectstyle dot org".
32  *
33  * 5. Products derived from this software may not be called "ObjectStyle"
34  * or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
35  * names without prior written permission.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
41  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48  * SUCH DAMAGE.
49  * ====================================================================
50  *
51  * This software consists of voluntary contributions made by many
52  * individuals and hosted on ObjectStyle Group web site. For more
53  * information on the ObjectStyle Group, please see
54  * <http://objectstyle.org/>.
55  */

56 package org.objectstyle.cayenne.project;
57
58 import java.io.File JavaDoc;
59
60 import org.objectstyle.cayenne.ConfigurationException;
61 import org.objectstyle.cayenne.conf.Configuration;
62 import org.objectstyle.cayenne.conf.DataSourceFactory;
63 import org.objectstyle.cayenne.conf.FileConfiguration;
64 import org.objectstyle.cayenne.conf.RuntimeLoadDelegate;
65 import org.objectstyle.cayenne.util.ResourceLocator;
66
67 /**
68  * Subclass of FileConfiguration used in the project model.
69  *
70  * @author Misha Shengaout
71  * @author Andrei Adamchik
72  */

73 public class ProjectConfiguration extends FileConfiguration {
74
75     /**
76      * Override parent implementation to ignore loading failures.
77      * @see FileConfiguration#FileConfiguration(File)
78      */

79     public ProjectConfiguration(File JavaDoc projectFile) {
80         super(projectFile);
81
82         // ignore loading failures
83
this.setIgnoringLoadFailures(true);
84
85         // configure deterministic file opening rules
86
ResourceLocator locator = this.getResourceLocator();
87         locator.setSkipAbsolutePath(false);
88         locator.setSkipClasspath(true);
89         locator.setSkipCurrentDirectory(true);
90         locator.setSkipHomeDirectory(true);
91
92         // install custom loader
93
setLoaderDelegate(new ProjectLoader());
94     }
95
96     /**
97      * Override parent implementation to prevent loading of
98      * nonexisting files.
99      * @see FileConfiguration#canInitialize()
100      */

101     public boolean canInitialize() {
102         return (super.canInitialize() && this.getProjectFile().isFile());
103     }
104
105     /**
106      * Override parent implementation to allow for null files.
107      * @see FileConfiguration#setProjectFile(File)
108      */

109     protected void setProjectFile(File JavaDoc projectFile) {
110         if ((projectFile != null) && (projectFile.exists())) {
111             super.setProjectFile(projectFile);
112         }
113         else {
114             super.projectFile = projectFile;
115             this.setDomainConfigurationName(Configuration.DEFAULT_DOMAIN_FILE);
116         }
117     }
118
119     /**
120      * Returns a DataSource factory for projects.
121      *
122      * @see org.objectstyle.cayenne.project.ProjectDataSourceFactory
123      */

124     public DataSourceFactory getDataSourceFactory() {
125         try {
126             return new ProjectDataSourceFactory(this.getProjectDirectory());
127         }
128         catch (Exception JavaDoc e) {
129             throw new ProjectException("Error creating DataSourceFactory.", e);
130         }
131     }
132
133     final class ProjectLoader extends RuntimeLoadDelegate {
134
135         public ProjectLoader() {
136             super(
137                 ProjectConfiguration.this,
138                 ProjectConfiguration.this.getLoadStatus(),
139                 ProjectConfiguration.getLoggingLevel());
140         }
141
142         public void shouldLoadDataDomain(String JavaDoc domainName) {
143             super.shouldLoadDataDomain(domainName);
144
145             try {
146                 // disable class indexing
147
findDomain(domainName).getEntityResolver().setIndexedByClass(false);
148             }
149             catch (Exception JavaDoc ex) {
150                 throw new ConfigurationException("Domain is not loaded: " + domainName);
151             }
152         }
153     }
154 }
155
Popular Tags