/***************************************************
*
* cismet GmbH, Saarbruecken, Germany
*
* ... and it just works.
*
****************************************************/
/*
* Copyright (C) 2010 thorsten
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package Sirius.server.search;
import Sirius.server.middleware.types.MetaClass;
import Sirius.server.newuser.User;
import org.apache.log4j.Logger;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Hashtable;
/**
* DOCUMENT ME!
*
* @author thorsten
* @version $Revision$, $Date$
*/
public abstract class CidsServerSearch implements Serializable {
//~ Static fields/initializers ---------------------------------------------
private static final transient Logger LOG = Logger.getLogger(CidsServerSearch.class);
public static String ALL_DOMAINS = "##ALL_CIDS_DOMAINS##";
public static String USER_DOMAIN = "##CIDS_USERDOMAIN##";
//~ Instance fields --------------------------------------------------------
private final HashMap<String, ArrayList<MetaClass>> classesPerDomain = new HashMap<String, ArrayList<MetaClass>>();
private User user;
private Hashtable activeLoaclServers;
private HashMap<String, String> classesInSnippetsPerDomain = new HashMap<String, String>();
private Collection<MetaClass> validClasses;
//~ Methods ----------------------------------------------------------------
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public Hashtable getActiveLoaclServers() {
return activeLoaclServers;
}
/**
* DOCUMENT ME!
*
* @param activeLoaclServers DOCUMENT ME!
*/
public void setActiveLoaclServers(final Hashtable activeLoaclServers) {
this.activeLoaclServers = activeLoaclServers;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public User getUser() {
return user;
}
/**
* DOCUMENT ME!
*
* @param user DOCUMENT ME!
*/
public void setUser(final User user) {
this.user = user;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public Collection<MetaClass> getValidClasses() {
return validClasses;
}
/**
* DOCUMENT ME!
*
* @param validClasses DOCUMENT ME!
*/
public void setValidClasses(final Collection<MetaClass> validClasses) {
this.validClasses = validClasses;
classesPerDomain.clear();
for (final MetaClass mc : validClasses) {
if (classesPerDomain.containsKey(mc.getDomain())) {
classesPerDomain.get(mc.getDomain()).add(mc);
} else {
final ArrayList<MetaClass> cA = new ArrayList<MetaClass>();
cA.add(mc);
classesPerDomain.put(mc.getDomain(), cA);
}
}
classesInSnippetsPerDomain.clear();
for (final String domain : classesPerDomain.keySet()) {
final String in = StaticSearchTools.getMetaClassIdsForInStatement(classesPerDomain.get(domain));
classesInSnippetsPerDomain.put(domain, in);
}
}
/**
* DOCUMENT ME!
*
* @param classes DOCUMENT ME!
*
* @throws IllegalArgumentException DOCUMENT ME!
*/
public void setValidClassesFromStrings(final Collection<String> classes) throws IllegalArgumentException {
for (final String classString : classes) {
final String[] sa = classString.split("@");
if ((sa == null) || (sa.length != 2)) {
throw new IllegalArgumentException("Strings must be of the form of classid@DOMAINNAME");
}
final String classId = sa[0];
final String domain = sa[1];
final String inStr = classesInSnippetsPerDomain.get(domain);
if (inStr != null) {
classesInSnippetsPerDomain.put(domain, inStr + "," + classId);
} else {
classesInSnippetsPerDomain.put(domain, classId);
}
}
for (final String domain : classesInSnippetsPerDomain.keySet()) {
classesInSnippetsPerDomain.put(domain, "(" + classesInSnippetsPerDomain.get(domain) + ")");
}
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public HashMap<String, String> getClassesInSnippetsPerDomain() {
return classesInSnippetsPerDomain;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public HashMap<String, ArrayList<MetaClass>> getClassesPerDomain() {
return classesPerDomain;
}
/**
* DOCUMENT ME!
*
* @param classesInSnippetsPerDomain DOCUMENT ME!
*/
public void setClassesInSnippetsPerDomain(final HashMap<String, String> classesInSnippetsPerDomain) {
this.classesInSnippetsPerDomain = classesInSnippetsPerDomain;
}
/**
* Performs the specified search.
*
* <p>Be aware that this method runs in server context and terefore has no access to the Navigator or cismap.</p>
*
* @return The objects matching the specified search.
*/
public abstract Collection performServerSearch();
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
protected Logger getLog() {
return LOG;
}
}