fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major/**
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * Copyright (c) 2008 Sun Microsystems Inc. All Rights Reserved
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * The contents of this file are subject to the terms
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * of the Common Development and Distribution License
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * (the License). You may not use this file except in
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * compliance with the License.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * You can obtain a copy of the License at
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * https://opensso.dev.java.net/public/CDDLv1.0.html or
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * opensso/legal/CDDLv1.0.txt
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * See the License for the specific language governing
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * permission and limitations under the License.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * When distributing Covered Code, include this CDDL
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * Header Notice in each file and include the License file
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * at opensso/legal/CDDLv1.0.txt.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * If applicable, add the following below the CDDL Header,
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * with the fields enclosed by brackets [] replaced by
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * your own identifying information:
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * "Portions Copyrighted [year] [name of copyright owner]"
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * $Id: MigrateFromInstallState.java,v 1.2 2008/06/25 05:51:22 qcheng Exp $
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major */
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorpackage com.sun.identity.install.tools.configurator;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.util.ArrayList;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.util.HashMap;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport java.util.Map;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorimport com.sun.identity.install.tools.util.Debug;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major/**
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * Class that encapuslates the state of an install instance. It provides
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * functionality to read instance specific data or global data.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major */
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Majorpublic class MigrateFromInstallState implements InstallConstants {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major /**
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * Creates a new InstallState object. One of the following cases may
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * apply:-
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * If no instances are configured corresponding to the given keyValuePairs,
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * then an InstallState object containing the input instance
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * (keyValuePairs) data (supplied map) will be returned. If a configured
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * instance is found associated with keyValuePairs supplied, then an
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * InstallState object containing the corresponding instance data and
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * global data is returned. If none of the configured instances correspond
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * to the given keyValuePairs then an InstallState object with just the
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * global data is returned.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * @param keyValuePairs
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * a Map containing key value pairs that should be used to look
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * up for the associated instance.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * @param keysToUse
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * A set of keys that should be only used to form a unique key.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major */
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major public MigrateFromInstallState(Map keyValuePairs, ArrayList keysToUse)
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major throws InstallException {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Debug.log("MigrateFromInstallState : initalizing the state");
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major String instanceName = getInstFinderStore().getInstanceName(
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major keyValuePairs, keysToUse);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // Load old product's install data.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major getInstallDataStore();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Debug.log("MigrateFromInstallState() - loaded Install state: " +
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major getInstallDataStore());
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major if (!MigrateFromInstallDataStore.isExistingStore()) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Debug.log("MigrateFromInstallState(): Error - " +
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major "No existing data store was found. " +
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major "Creating state with Instance Finder data.");
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major } else {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Debug.log("MigrateFromInstallState(): Existing data store found. " +
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major "Creating state.");
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // Existing install state (global & may be instance state too)
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major initializeFromStore(instanceName, keyValuePairs);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major /**
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * get StateAccess saved.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * @return PersistentStateAccess saved
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major */
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major public PersistentStateAccess getStateAccess() {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major return pStateAccess;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major /**
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * Returns the name of the instance associated with this InstallState
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major *
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * @return the instance name
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major */
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major public String getInstanceName() {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major return instanceName;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major /*
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major * initialized InstallState from install data saved in file.
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major */
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private void initializeFromStore(String instanceName, Map nameValuePair)
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major throws InstallException {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major PersistentStateAccess pStateAccess = new PersistentStateAccess();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // Retrieve Global data copy (not reference)
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major StateData globalData = getInstallDataStore().getGlobalDataCopy();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major pStateAccess.setGlobalData(globalData);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major HashMap completeData = new HashMap(globalData.getNameValueMap());
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major pStateAccess.setCompleteData(completeData);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // Retrieve copy of instance data (not reference)
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major StateData instanceData = getInstallDataStore().getInstanceDataCopy(
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major instanceName);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major if (instanceData == null) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Debug.log("MigrateFromInstallState : initializing. " +
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major "No instance data found for instance " + instanceName);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // New Instance
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major instanceData = new StateData(instanceName, true, false);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major pStateAccess.setInstanceData(instanceData);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major pStateAccess.getInstanceData().putAll(nameValuePair);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major pStateAccess.getCompleteData().putAll(nameValuePair);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major } else {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major // Already Configured Instance
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major Debug.log("MigrateFromInstallState : initializing. " +
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major "Instance data found for instance: " + instanceName);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major pStateAccess.setInstanceData(instanceData);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major pStateAccess.getInstanceData().setInstanceAsConfigured(true);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major pStateAccess.getCompleteData().putAll(
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major instanceData.getNameValueMap());
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major setStateAccess(pStateAccess);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major setInstanceName(instanceName);
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private static MigrateFromInstFinderStore getInstFinderStore() throws
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major InstallException {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major return MigrateFromInstFinderStore.getInstance();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private static InstallDataStore getInstallDataStore()
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major throws InstallException {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major return MigrateFromInstallDataStore.getInstallDataStore();
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private void setStateAccess(PersistentStateAccess stateAccess) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major pStateAccess = stateAccess;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private void setInstanceName(String name) {
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major instanceName = name;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major }
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private String instanceName;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major private PersistentStateAccess pStateAccess;
fb379c70e3fd8a537f311b99be4759ae41e02750Peter Major}