Dear Jllort,
I was testing out the file importer and index importer script.
However, it cannot locate files in OpenKM although i have checked that the file path and name is the same.
Notice the image below, filepath is the same as the one in the importer but it is not able to locate the file for adding metadata values.
The text below is the metadata.csv file.
I don't get why system is unable to locate the files. Please help.
					
										
																										
            I was testing out the file importer and index importer script.
However, it cannot locate files in OpenKM although i have checked that the file path and name is the same.
Notice the image below, filepath is the same as the one in the importer but it is not able to locate the file for adding metadata values.
Code: Select all
import com.openkm.core.*;
import com.openkm.api.*;
import com.openkm.module.db.stuff.DbSessionManager;
import java.text.*;
import java.io.*;
import java.nio.file.Files;
import java.nio.file;
import java.nio.file.Path;
import java.util.*;
import java.util.Iterator;
import java.util.List;
import java.util.Collection;
import java.util.concurrent;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import com.googlecode.jcsv.CSVStrategy;
import com.googlecode.jcsv.reader.CSVReader;
import com.googlecode.jcsv.reader.internal.CSVReaderBuilder;
import com.googlecode.jcsv.reader.internal.DefaultCSVEntryParser;
import com.openkm.dao.bean.QueryParams;
import com.openkm.bean.QueryResult;
import com.openkm.util.FileLogger;
import com.openkm.util.PathUtils;
import com.openkm.bean.ContentInfo;
//******************************PARAMETERS********************************************
OKMDocument okmdocument = OKMDocument.getInstance();
OKMFolder okmfolder = OKMFolder.getInstance();
String token = DbSessionManager.getInstance().getSystemToken();
String okm_path = "/okm:root/scanner/MR/";
String upload_path = "/home/ksklsu/batchupload/MR/";
String backup_path = "/home/ksklsu/backup/backup_batchupload/MR/";
//******************************PARAMETERS********************************************
//************************* AUTOIMPORT FILE START ****************************************
public void autoImport(String okmPath, File fldpath){
  try {
	
	print("Scanning " + fldpath.getName() + "<br>");
	for (File folder : fldpath.listFiles()) {
		print("Importing " + folder.getName() + "<br>");
	
	try {
	  if (folder.isDirectory()) {
		try {
		  
		// To Create folder in OKM
		try {
		  okmfolder.createSimple(token, okmPath + folder.getName());
		} catch (ItemExistsException ie) {
		  print("ksklsu-folder already exists<br>");
		}
		
		// To create system backup folder
		File dir = new File (backup_path + folder.getName());
		try {
			if(dir.exists()){
				print( dir.getName() + " Folder Exist <br>");
			} else {
				dir.mkdir();
				dir.setReadable(true,false);
				dir.setWritable(true,false);
				print("System- " + dir.getName() +" Folder created <br>");
			}
		} catch (Exception e) {
			print ("Exception " + e + "<br>");
		}
		// Add files in the folder
			for (File file : folder.listFiles()) {
				// Check if file is still writing
				String newFileName = dir + "/" + file.getName();
				Path target_path = new File(newFileName).toPath();
				
				String file_ext = FilenameUtils.getExtension(file.getPath());
				String ext = "csv";
				print (file_ext+ "<br>");
				// Only import non csv because metadata.csv not needed
				if(!file_ext.equals(ext)) {
				
					long length = file.length();
					Thread.sleep(1000);
					if (file.length() > length) continue;  // Skip file this time
					try {
					String x_file = okmPath + folder.getName() + "/" + file.getName();
					okmdocument.createSimple(token, x_file, new FileInputStream(file));
					print("Created " + okmPath + file.getName() + "<br>");
					} catch (Exception e) {
						print("Exception: " + e + "<br>");
						continue;
					}
					// Move files
					try {
						Files.move(file.toPath(), target_path);
						print("Moved to backup " + file.getName());
					} catch (Exception e) {
						print ("Exception: " + e);
						continue;
					}
				} 
			}
			
			
		} catch (Exception e) {
			print ("Exception: " + e + "<br>");
		}
	  }
	} catch (Exception e) {
	  print ("Exception:" + e + "<br>");
	  // Something bad happened to prevent import. Skip to next file.
	 continue;
	}
	}
  } catch (Exception e) {
	print("Exception: " + e + "<br>");
  }
}
autoImport(okm_path, new File(upload_path)); // 1. Check folder path for upload
//************************* AUTOIMPORT FILE END ****************************************/
//************************* AUTOINDEXING START **************************************
// Start of metadata csv file grabbing, auto indexing based on csv
// CHECK CSV FORMAT, SAVING IN LATER VERSION CAUSES INCOMPATIBILITY
String 	FILE_LOG_NAME = "CSVLOG";
String 	Metadata_path = upload_path; 
File	META_FILE_PATH= new File(Metadata_path);
List<String> BATCH = new ArrayList<String>();
String 	META_FILE_NAME = "/metadata.csv";	
String 	grpName  = "okg:medicalrecord";	
String	grpLabel1= "okp:medicalrecord.pt";
String	grpLabel2= "okp:medicalrecord.mrn";
String	grpLabel3= "okp:medicalrecord.date";
String 	grpLabel4= "okp:medicalrecord.name";
String	grpLabel5= "okp:medicalrecord.ic";
String	grpLabel6= "okp:medicalrecord.case";
String	grpLabel7= "okp:medicalrecord.epi";
int uniqueFileName = 1;
int column1 = 2; 
int column2 = 3; 
int column3 = 4;
int column4 = 5;
int column5 = 6;
int column6 = 7;
int	column7	= 8;
try {
    for (File folder : META_FILE_PATH.listFiles()) {
	  try {
		  if (folder.isDirectory()) {
			  BATCH.add(folder.getName());
		  }
	  } catch (Exception e) {
		  print("Exception: " + e + "</br>");
	  }
	}
} catch (Exception e) {
	print("Exception: " + e + "</br>");
}
for (String batch : BATCH) {
	String mtdata_file = Metadata_path + batch + META_FILE_NAME;
	print("Importing metadata " + batch + "</br>");
	// Format defintion
	char delimiter = ',';
	char quoteCharacter = '"';
	char commentIndicator = '#';
	boolean skipHeader = true;
	boolean ignoreEmptyLines = true;
	CSVStrategy strategy = new CSVStrategy(delimiter, quoteCharacter, commentIndicator, skipHeader, ignoreEmptyLines);
	// File reader
	Reader reader = new FileReader(mtdata_file);
	// CSV reader
	CSVReader csvParser = new CSVReaderBuilder(reader).strategy(strategy).entryParser(new DefaultCSVEntryParser()).build();
	List data = csvParser.readAll();
	int count = 1;
	int countFound = 0;
	int countNotDocument = 0;
	int moreThanOneDocumentFound = 0;
	int notFound = 0;
	int noName = 0;
	for (Iterator it = data.listIterator(); it.hasNext();) {
		String[] row = (String[]) it.next();
		String docPath = row[uniqueFileName];
		print(count + ">>>> " + docPath);
		if (docPath != null && !docPath.equals("")) {
			QueryParams queryParams = new QueryParams();
			queryParams.setDomain(QueryParams.DOCUMENT);
			queryParams.setName(PathUtils.getName(docPath));
			Collection results = OKMSearch.getInstance().find(token, queryParams);
			if (results.size() == 1) {
				QueryResult queryResult = (QueryResult) results.iterator().next();
				if (queryResult.getNode() != null) { 
					print("found");
					countFound++;
					Map mtdata = new HashMap();
					mtdata.put(grpLabel1,row[column1]);
					mtdata.put(grpLabel2,row[column2]);
					mtdata.put(grpLabel3,row[column3]);
					mtdata.put(grpLabel4,row[column4]);
					mtdata.put(grpLabel5,row[column5]);
					mtdata.put(grpLabel6,row[column6]);
					mtdata.put(grpLabel7,row[column7]);
					
					// ADD GROUP
					OKMPropertyGroup.getInstance().addGroup(token, docPath, grpName);
					// Set property value
					OKMPropertyGroup.getInstance().setPropertiesSimple(token, docPath, grpName, mtdata);
			
				} else {
					print("error is not document");
					countNotDocument++;
				}
			} else if (results.size() > 1) {
				print("error more than one document found can not decide");
				moreThanOneDocumentFound++;
			} else {
				print("not found");
				notFound++;
			}
		} else {
			print("error document has no name");
			noName++;
		}
		print("</br>");
		//FileLogger.info(FILE_LOG_NAME, "Document name ''{0}'' to ''{1}''", row[0], row[posDocRevNo]);
		count++;
	}
	
	print("Total:" + count + "</br>");
	print("Found:" + countFound + "</br>");
	print("Error not document:" + countNotDocument + "</br>");
	print("Error more then one document found:" + moreThanOneDocumentFound + "</br>");
	print("Error not found:" + notFound + "</br>");
	print("Error name empty:" + notFound + "</br>");
}
//************************* AUTOINDEXING END**************************************/
//********************* AUTOFOLDER MEDICAL RECORD START **************************
print("Auto-folder starting..."+ "</br>");
String medicalrecordpath = "/okm:root/MR_temp/";
String propertyGroup =  "okg:medicalrecord";
String scanFolder = "/okm:root/scanner/MR/"; 
int    countMove = 0;
ArrayList doclist = OKMDocument.getInstance().getChildren(token,scanFolder);// ADDED TOKEN
for (i=0;i<doclist.size();i++){
	
	if (OKMPropertyGroup.getInstance().hasGroup(token,doclist.get(i).getUuid(),propertyGroup))  { // ADDED TOKEN
		
		OKMDocument.getInstance().move(token,doclist.get(i).getUuid(),medicalrecordpath); // ADDED TOKEN
		countMove++;
	}
}
print("Moved " + countMove + " files to " + medicalrecordpath + "</br>");
print("Auto-folder end.");
//********************* AUTOFOLDER MEDICAL RECORD END ******************************/
The text below is the metadata.csv file.
Code: Select all
Name,DP_uniqueFileName,DP_PatientType,DP_MRN,DP_AdmDate,DP_Name,DP_IC,DP_CaseNo,DP_Episode
"DayPatient 53","/okm:root/scanner/MR/Batch 1/00546598 - 20180628.pdf","dp","00546598","20180628120000","CHIN YOONG (FOLDER)","420401065018","201800007217",""
"InPatient 54","/okm:root/scanner/MR/Batch 1/00554001 - 20180627.pdf","ip","00554001","20180627120000","MOHANA SUN DRAM A/L PARAMUCHUWA","800107065847","201800007119",""
I don't get why system is unable to locate the files. Please help.
