blob: 2d0aadbe78c18436bec4fae87575c357eed38638 [file] [log] [blame]
/*
* 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.solr.handler.dataimport;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* This transformer does 3 things
* <ul>
* <li>It turns every row into 3 rows,
* modifying any "id" column to ensure duplicate entries in the index
* <li>The 2nd Row has 2x values for every column,
* with the added one being backwards of the original
* <li>The 3rd Row has an added static value
* </ul>
*
* Also, this does not extend Transformer.
*/
public class TripleThreatTransformer {
public Object transformRow(Map<String, Object> row) {
List<Map<String, Object>> rows = new ArrayList<>(3);
rows.add(row);
rows.add(addDuplicateBackwardsValues(row));
rows.add(new LinkedHashMap<>(row));
rows.get(2).put("AddAColumn_s", "Added");
modifyIdColumn(rows.get(1), 1);
modifyIdColumn(rows.get(2), 2);
return rows;
}
private LinkedHashMap<String,Object> addDuplicateBackwardsValues(Map<String, Object> row) {
LinkedHashMap<String,Object> n = new LinkedHashMap<>();
for(Map.Entry<String,Object> entry : row.entrySet()) {
String key = entry.getKey();
if(!"id".equalsIgnoreCase(key)) {
String[] vals = new String[2];
vals[0] = entry.getValue()==null ? "null" : entry.getValue().toString();
vals[1] = new StringBuilder(vals[0]).reverse().toString();
n.put(key, Arrays.asList(vals));
} else {
n.put(key, entry.getValue());
}
}
return n;
}
private void modifyIdColumn(Map<String, Object> row, int num) {
Object o = row.remove("ID");
if(o==null) {
o = row.remove("id");
}
if(o!=null) {
String id = o.toString();
id = "TripleThreat-" + num + "-" + id;
row.put("id", id);
}
}
}