/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
package org.glassfish.appclient.server.core.jws;
import com.sun.enterprise.module.bootstrap.StartupContext;
import java.io.File;
import java.util.List;
import javax.inject.Inject;
import org.glassfish.api.admin.ServerEnvironment;
import org.jvnet.hk2.annotations.Service;
import org.glassfish.hk2.api.PostConstruct;
import javax.inject.Singleton;
/**
* Maintains the in-memory representation for the customization points of
* the Java Web Start JNLP that a developer might provide inside his or her
* app client. During deployment, if such custom JNLP exists in the
* app client being deployed then the server combines that developer-provided
* JNLP with the server-generated JNLP to produce the JNLP document that
* is used for launching the app client.
* <p>
* There are two aspects to this combination: merging the JNLP XML data itself
* and detecting and recording places in the developer-provided JNLP which
* refer to other resources - JARs, native libraries, other JNLP documents.
* <p>
* The on-disk config file contains property settings for both types of
* XPath information. This service makes sure that the in-memory data is
* up-to-date with respect to the on-disk file. The server installation
* includes the config file in the installations's config directory. But for
* unusual circumstances, this class looks for the config file
* first in the domain's config directory and, if it is not there or is there
* but is not readable, then tries to read the file from the installations's
* config directory. Note that even if the installation's config is more
* recent than the domain's config this class will always prefer the domain's
* config file if it exists and is readable.
*
* @author tjquinn
*/
@Service
@Singleton
public class DeveloperContentService implements PostConstruct {
/** for locating the installation's client JNLP config file */
@Inject
private StartupContext startupContext;
/** for locating the domain's client JNLP config file (if any) */
@Inject
private ServerEnvironment serverEnv;
/** the always-current data reflecting what is in the on-disk file */
private ClientJNLPConfigData configData = null;
public void postConstruct() {
configData = new ClientJNLPConfigData(installConfigDir(), domainConfigDir());
}
private File installConfigDir() {
return new File(startupContext.getArguments().getProperty("com.sun.aas.installRoot"), "config");
}
private File domainConfigDir() {
return serverEnv.getConfigDirPath();
}
/**
* Returns the XPath-related objects for references to other resources
* that might exist in the developer's JNLP.
*
* @return XPathToDeveloperProvidedContentRefs objects for reference sites
*/
List<XPathToDeveloperProvidedContentRefs> xPathsToDevContentRefs() {
return configData.xPathsToDevContentRefs();
}
/**
* Returns the XPath-related objects for combining parts of the JNLP from
* the developer with the JNLP generated by the server.
*
* @return CombinedXPath objects for JNLP sites to be combined
*/
List<CombinedXPath> xPathsToCombinedContent() {
return configData.xPathsToCombinedContent();
}
}