/******************************************************************************* * Copyright (c) 2013 aegif. * * This file is part of NemakiWare. * * NemakiWare 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. * * NemakiWare 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 NemakiWare. * If not, see <http://www.gnu.org/licenses/>. * * Contributors: * linzhixing(https://github.com/linzhixing) - initial API and implementation ******************************************************************************/ package jp.aegif.nemaki.cmis.aspect.query.solr; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import jp.aegif.nemaki.cmis.aspect.SortUtil; import jp.aegif.nemaki.util.PropertyManager; import jp.aegif.nemaki.util.constant.PropertyKey; import org.antlr.runtime.tree.Tree; import org.apache.chemistry.opencmis.commons.PropertyIds; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.solr.client.solrj.SolrServer; import org.apache.solr.client.solrj.impl.HttpSolrServer; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.WebResource; /** * Common utility class for Solr query * * @author linzhixing * */ public class SolrUtil { private static final Log log = LogFactory.getLog(SortUtil.class); private final HashMap<String, String> map; private PropertyManager propertyManager; public SolrUtil() { map = new HashMap<String, String>(); map.put(PropertyIds.OBJECT_ID, "object_id"); map.put(PropertyIds.BASE_TYPE_ID, "basetype"); map.put(PropertyIds.OBJECT_TYPE_ID, "objecttype"); map.put(PropertyIds.NAME, "name"); map.put(PropertyIds.DESCRIPTION, "cmis_description"); map.put(PropertyIds.CREATION_DATE, "created"); map.put(PropertyIds.CREATED_BY, "creator"); map.put(PropertyIds.LAST_MODIFICATION_DATE, "modified"); map.put(PropertyIds.LAST_MODIFIED_BY, "modifier"); map.put(PropertyIds.SECONDARY_OBJECT_TYPE_IDS, "secondary_object_type_ids"); map.put(PropertyIds.IS_MAJOR_VERSION, "is_major_version"); map.put(PropertyIds.IS_PRIVATE_WORKING_COPY, "is_pwc"); map.put(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, "is_checkedout"); map.put(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, "checkedout_id"); map.put(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, "checkedout_by"); map.put(PropertyIds.CHECKIN_COMMENT, "checkein_comment"); map.put(PropertyIds.VERSION_LABEL, "version_label"); map.put(PropertyIds.VERSION_SERIES_ID, "version_series_id"); map.put(PropertyIds.CONTENT_STREAM_ID, "content_name"); map.put(PropertyIds.CONTENT_STREAM_FILE_NAME, "content_id"); map.put(PropertyIds.CONTENT_STREAM_LENGTH, "content_length"); map.put(PropertyIds.CONTENT_STREAM_MIME_TYPE, "content_mimetype"); map.put(PropertyIds.PARENT_ID, "parent_id"); map.put(PropertyIds.PATH, "path"); } /** * Get Solr server instance * * @return */ public SolrServer getSolrServer() { String url = getSolrUrl(); return new HttpSolrServer(url); } /** * CMIS to Solr property name dictionary * * @param cmisColName * @return */ public String getPropertyNameInSolr(String cmisColName) { String val = map.get(cmisColName); if (val == null) { val = "dynamic.property." + cmisColName; } return val; } public String convertToString(Tree propertyNode) { List<String> _string = new ArrayList<String>(); for (int i = 0; i < propertyNode.getChildCount(); i++) { _string.add(propertyNode.getChild(i).toString()); } return StringUtils.join(_string, "."); } public void callSolrIndexing(String repositoryId) { String _force = propertyManager .readValue(PropertyKey.SOLR_INDEXING_FORCE); boolean force = (Boolean.TRUE.toString().equals(_force)) ? true : false; if (!force) return; String url = getSolrUrl(); Client client = Client.create(); // TODO Regardless a slash on the last, build the correct URL WebResource webResource = client.resource(url + "admin/cores?core=nemaki&action=index&tracking=AUTO&repositoryId=" + repositoryId); String xml = webResource.accept("application/xml").get(String.class); // TODO log according to the response status } public String getSolrUrl(){ String protocol = propertyManager.readValue(PropertyKey.SOLR_PROTOCOL); String host = propertyManager.readValue(PropertyKey.SOLR_HOST); int port = Integer.valueOf(propertyManager .readValue(PropertyKey.SOLR_PORT)); String context = propertyManager.readValue(PropertyKey.SOLR_CONTEXT); String url = null; try { URL _url = new URL(protocol, host, port, ""); url = _url.toString() + "/" + context + "/"; } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } log.info("Solr URL:" + url); return url; } public void setPropertyManager(PropertyManager propertyManager) { this.propertyManager = propertyManager; } }