Package org.apache.blur.slur

Source Code of org.apache.blur.slur.SolrLookingBlurServer

/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF 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 org.apache.blur.slur;

import java.io.IOException;
import java.util.Collection;
import java.util.List;

import org.apache.blur.thrift.BlurClient;
import org.apache.blur.thrift.generated.Blur.Iface;
import org.apache.blur.thrift.generated.BlurQuery;
import org.apache.blur.thrift.generated.BlurResults;
import org.apache.blur.thrift.generated.RowMutation;
import org.apache.blur.thrift.generated.RowMutationType;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrRequest.METHOD;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.StreamingResponseCallback;
import org.apache.solr.client.solrj.beans.DocumentObjectBinder;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.response.SolrPingResponse;
import org.apache.solr.client.solrj.response.SolrResponseBase;
import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.util.NamedList;

import com.google.common.collect.Lists;

public class SolrLookingBlurServer extends SolrServer {
  private static final long serialVersionUID = -7141309168500300896L;
  private static final int DEFAULT_OPTIMIZE_MAX_SEGMENTS = 3;
  private String connectionString;
  private String tableName;

  public SolrLookingBlurServer(String controllerConnectionStr, String table) {
    connectionString = controllerConnectionStr;
    tableName = table;
  }

  @Override
  public NamedList<Object> request(SolrRequest arg0) throws SolrServerException, IOException {
    throw new RuntimeException("Not Implemented.");
  }

  @Override
  public void shutdown() {
    // Nothing to do
  }

  @Override
  public UpdateResponse add(Collection<SolrInputDocument> docs, int commitWithinMs) throws SolrServerException,
      IOException {
    return add(docs);
  }

  @Override
  public UpdateResponse add(final Collection<SolrInputDocument> docs) throws SolrServerException, IOException {
    return respond(UpdateResponse.class, new Command() {
      public void process() throws Exception {
        if (docs.size() == 1) {
          client().mutate(RowMutationHelper.from(docs.iterator().next(), tableName));
        } else {
          client().mutateBatch(RowMutationHelper.from(docs, tableName));
        }
      }
    });
  }

  @Override
  public UpdateResponse add(SolrInputDocument doc, int commitWithinMs) throws SolrServerException, IOException {
    return add(doc);
  }

  @Override
  public UpdateResponse add(SolrInputDocument doc) throws SolrServerException, IOException {
    return add(Lists.newArrayList(new SolrInputDocument[] { doc }));
  }

  @Override
  public UpdateResponse addBean(Object obj, int commitWithinMs) throws IOException, SolrServerException {
    throw new RuntimeException("Not Implemented.");
  }

  @Override
  public UpdateResponse addBean(Object obj) throws IOException, SolrServerException {
    throw new RuntimeException("Not Implemented.");
  }

  @Override
  public UpdateResponse addBeans(Collection<?> arg0, int arg1) throws SolrServerException, IOException {
    throw new RuntimeException("Not Implemented.");
  }

  @Override
  public UpdateResponse addBeans(Collection<?> beans) throws SolrServerException, IOException {
    throw new RuntimeException("Not Implemented.");
  }

  @Override
  public UpdateResponse commit() throws SolrServerException, IOException {
    return new UpdateResponse();
  }

  @Override
  public UpdateResponse commit(boolean waitFlush, boolean waitSearcher, boolean softCommit) throws SolrServerException,
      IOException {
    return new UpdateResponse();
  }

  @Override
  public UpdateResponse commit(boolean waitFlush, boolean waitSearcher) throws SolrServerException, IOException {
    return new UpdateResponse();
  }

  @Override
  public UpdateResponse deleteById(List<String> ids, int commitWithinMs) throws SolrServerException, IOException {
    return deleteById(ids);
  }

  @Override
  public UpdateResponse deleteById(final List<String> ids) throws SolrServerException, IOException {
    return respond(UpdateResponse.class, new Command() {
      public void process() throws Exception {
        if (ids.size() == 1) {
          client().mutate(toDeleteMutation(ids.get(0)));
        } else {
          List<RowMutation> mutates = Lists.newArrayList();
          for (String id : ids) {
            mutates.add(toDeleteMutation(id));
          }
          client().mutateBatch(mutates);
        }
      }
    });
  }

  private RowMutation toDeleteMutation(String id) {
    RowMutation mutate = new RowMutation();
    mutate.setRowId(id);
    mutate.setRowMutationType(RowMutationType.DELETE_ROW);
    mutate.setTable(tableName);
    return mutate;
  }

  @Override
  public UpdateResponse deleteById(String id, int commitWithinMs) throws SolrServerException, IOException {
    return deleteById(id);
  }

  @Override
  public UpdateResponse deleteById(String id) throws SolrServerException, IOException {
    return deleteById(Lists.newArrayList(id));
  }

  @Override
  public UpdateResponse deleteByQuery(String query, int commitWithinMs) throws SolrServerException, IOException {
    throw new RuntimeException("Not Implemented.");
  }

  @Override
  public UpdateResponse deleteByQuery(String query) throws SolrServerException, IOException {
    throw new RuntimeException("Not Implemented.");
  }

  @Override
  public DocumentObjectBinder getBinder() {
    throw new RuntimeException("Not Implemented.");
  }

  @Override
  public UpdateResponse optimize() throws SolrServerException, IOException {
    return optimize(true, true, DEFAULT_OPTIMIZE_MAX_SEGMENTS);
  }

  @Override
  public UpdateResponse optimize(boolean waitFlush, boolean waitSearcher, final int maxSegments)
      throws SolrServerException,
      IOException {
    return respond(UpdateResponse.class, new Command() {
      public void process() throws Exception {
        client().optimize(tableName, maxSegments);
      }
    });
  }

  @Override
  public UpdateResponse optimize(boolean waitFlush, boolean waitSearcher) throws SolrServerException, IOException {
    return optimize(waitFlush, waitSearcher, DEFAULT_OPTIMIZE_MAX_SEGMENTS);
  }

  @Override
  public SolrPingResponse ping() throws SolrServerException, IOException {
    return respond(SolrPingResponse.class, new Command() {
      public void process() throws Exception {
        client().ping();
      }
    });
  }

  @Override
  public QueryResponse query(SolrParams params, METHOD method) throws SolrServerException {
    throw new RuntimeException("Not Implemented.");
  }

  @Override
  public QueryResponse query(SolrParams params) throws SolrServerException {
    QueryResponse response = new QueryResponse();
    long start = System.currentTimeMillis();

    try {
      BlurQuery blurQuery = BlurQueryHelper.from(params);
      BlurResults results = client().query(tableName, blurQuery);
      NamedList<Object> resp = new NamedList<Object>();

      resp.add("response", BlurResultHelper.from(results));

      response.setResponse(resp);
    } catch (Exception e) {
      throw new SolrServerException("Unable to complete query", e);
    }

    response.setElapsedTime((System.currentTimeMillis() - start));

    return response;
  }

  @Override
  public QueryResponse queryAndStreamResponse(SolrParams params, StreamingResponseCallback callback)
      throws SolrServerException, IOException {
    throw new RuntimeException("Not Implemented.");
  }

  @Override
  public UpdateResponse rollback() throws SolrServerException, IOException {
    throw new RuntimeException("Not Implemented.");
  }

  private Iface client() {
    return BlurClient.getClient(connectionString);
  }

  @SuppressWarnings("unchecked")
  private <T extends SolrResponseBase> T respond(Class<T> typ, Command command) throws SolrServerException {
    SolrResponseBase response;
    long start = System.currentTimeMillis();
    try {
      response = typ.newInstance();

      command.process();
    } catch (Exception e) {
      throw new SolrServerException("Unable to complete update request.", e);
    }
    response.setElapsedTime((System.currentTimeMillis() - start));
    return (T) response;
  }

  private abstract static class Command {
    abstract void process() throws Exception;
  }
}
TOP

Related Classes of org.apache.blur.slur.SolrLookingBlurServer

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.