edu.unc.lib.dl.data.ingest.solr.test.AtomicUpdateTest.java Source code

Java tutorial

Introduction

Here is the source code for edu.unc.lib.dl.data.ingest.solr.test.AtomicUpdateTest.java

Source

/**
 * Copyright 2008 The University of North Carolina at Chapel Hill
 *
 * Licensed 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 edu.unc.lib.dl.data.ingest.solr.test;

import java.io.IOException;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import org.apache.solr.client.solrj.beans.DocumentObjectBinder;
import org.apache.solr.client.solrj.util.ClientUtils;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
import org.junit.Test;

import edu.unc.lib.dl.search.solr.model.IndexDocumentBean;

public class AtomicUpdateTest {

    private static String ID_FIELD = "id";
    private static String UPDATE_TIMESTAMP = "timestamp";

    @Test
    public void atomicUpdate() throws IOException {
        IndexDocumentBean idb = new IndexDocumentBean();
        idb.setId("id");
        idb.setStatus(Arrays.asList("Unpublished", "Parent Unpublished"));

        DocumentObjectBinder binder = new DocumentObjectBinder();
        SolrInputDocument sid = binder.toSolrInputDocument(idb);

        String operation = "set";

        for (String fieldName : sid.getFieldNames()) {
            if (!ID_FIELD.equals(fieldName)) {
                SolrInputField inputField = sid.getField(fieldName);
                // Adding in each non-null field value, except the timestamp field which gets cleared if not specified so
                // that it always gets updated as part of a partial update
                // TODO enable timestamp updating when fix for SOLR-4133 is released, which enables setting null fields
                if (inputField != null && (inputField.getValue() != null || UPDATE_TIMESTAMP.equals(fieldName))) {
                    Map<String, Object> partialUpdate = new HashMap<String, Object>();
                    partialUpdate.put(operation, inputField.getValue());
                    sid.setField(fieldName, partialUpdate);
                }
            }
        }

        /*   Map<String,String> mapField = new HashMap<String,String>();
           mapField.put("", arg1)
           Map<String, Object> partialUpdate = new HashMap<String, Object>();
           partialUpdate.put("set", inputField.getFirstValue());
           sid.setField(fieldName, partialUpdate);*/

        StringWriter writer = new StringWriter();
        ClientUtils.writeXML(sid, writer);

        System.out.println(writer.toString());

        System.out.println(sid.toString());
    }
}