Package com.esri.gpt.framework.sql

Source Code of com.esri.gpt.framework.sql.DatabaseReferences

/* See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* Esri Inc. licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.esri.gpt.framework.sql;
import com.esri.gpt.framework.collection.StringSet;
import com.esri.gpt.framework.util.Val;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Iterator;

/**
* DatabaseReference collection.
*/
public final class DatabaseReferences implements Serializable {

// class variables =============================================================

/** Default tag. */
private static final String TAG_DEFAULT = "default";

// instance variables ==========================================================
private HashMap<String,DatabaseReference> _hmReferencesByName;
private HashMap<String,DatabaseReference> _hmReferencesByTagName;

// constructors ================================================================

/** Default constructor. */
public DatabaseReferences() {
  _hmReferencesByName = new HashMap<String,DatabaseReference>();
  _hmReferencesByTagName = new HashMap<String,DatabaseReference>();
}

// properties ==================================================================

// methods =====================================================================


/**
* Adds a DatabaseReference to the collection.
* @param reference the DatabaseReference to add
* @param testConnection  if true the connection will be tested
*/
public void add(DatabaseReference reference,
                boolean testConnection) {

  // check the name
  reference.setIsJndiBased((reference.getJndiName().length() > 0));
  String sName = reference.getReferenceName();
  if ((sName.length() == 0) && reference.getIsJndiBased()) {
    reference.setReferenceName(reference.getJndiName());
    sName = reference.getReferenceName();
  }

  // add the reference
  if ((sName.length() > 0) && (findByTag(sName) == null)) {
    StringSet tags = reference.getTags();
    tags.add(sName);
    if (reference.getIsJndiBased()) {
      tags.add(reference.getJndiName());
    }

    // remove tags that have already been referenced
    Iterator<String> it = _hmReferencesByTagName.keySet().iterator();
    while (it.hasNext()) {
      tags.remove(it.next());
    }

    // store new references and tags
    int nTags = tags.size();
    if (nTags > 0) {
      _hmReferencesByName.put(sName.toLowerCase(),reference);
      for (String sTag: tags) {
        _hmReferencesByTagName.put(sTag.toLowerCase(),reference);
      }

      // this will try open and close a connection
      if (testConnection) {
        reference.testConnection();
      }
    }
  }
}

/**
* Finds the DatabaseReference associated with a name.
* @param referenceName the name associated with the reference to find
* @return the associated reference (null if none)
*/
private DatabaseReference findByReferenceName(String referenceName) {
  return _hmReferencesByName.get(Val.chkStr(referenceName).toLowerCase());
}

/**
* Finds the DatabaseReference associated with a tag.
* @param tag the tag associated with the reference to find
* @return the associated reference (null if none)
*/
protected DatabaseReference findByTag(String tag) {
  tag = Val.chkStr(tag).toLowerCase();
  if (tag.length() == 0) {
    tag = "default";
  }
  return _hmReferencesByTagName.get(tag);
}

/**
* Returns a string representation of this object.
* @return the string
*/
@Override
public String toString() {
  Iterator<DatabaseReference> it = _hmReferencesByName.values().iterator();
  StringBuffer sb = new StringBuffer();
  sb.append(getClass().getName()).append(" (\n");
  while (it.hasNext()) {
    DatabaseReference dbRef = it.next();
    sb.append(dbRef.toString()).append("\n");
  }
  sb.append(") ===== end ").append(getClass().getName());
  return sb.toString();
}

}
TOP

Related Classes of com.esri.gpt.framework.sql.DatabaseReferences

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.