/*
* Copyright 2000-2001,2004 The Apache Software Foundation.
*
* 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 org.apache.jetspeed.services.psmlmanager;
import java.util.Iterator;
import org.apache.turbine.services.TurbineServices;
// Jetspeed Security service
import org.apache.jetspeed.services.JetspeedSecurity;
import org.apache.jetspeed.services.security.JetspeedSecurityException;
import org.apache.jetspeed.services.security.UnknownUserException;
import org.apache.jetspeed.om.security.JetspeedUser;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
// Profile and ProfileLocator interface
import org.apache.jetspeed.services.PsmlManager;
import org.apache.jetspeed.om.profile.QueryLocator;
import org.apache.turbine.util.TurbineConfig;
/**
* Reads all PSML files from the file system and imports them into PSML DB
*
* @author <a href="mailto:taylor@apache.org">David Sean Taylor</a>
* @version $Id: PsmlImporter.java,v 1.16 2004/02/23 03:32:51 jford Exp $
*/
public class PsmlImporter
{
/**
* Static initialization of the logger for this class
*/
private static final JetspeedLogger logger = JetspeedLogFactoryService.getLogger(PsmlImporter.class.getName());
protected boolean check = true;
public PsmlImporter()
{
}
public static void main(String args[])
{
System.out.println("***** PSML Importer *****");
boolean checkImport = true;
//
// initialize and bootstrap services
//
try
{
String root = "./webapp";
String properties = "/WEB-INF/conf/TurbineResources.properties";
if (args.length > 0)
{
if (args[0].equalsIgnoreCase("true"))
checkImport = true;
else
checkImport = false;
}
if (args.length > 1)
{
root = args[1];
}
if (args.length > 2)
{
properties = args[2];
}
TurbineConfig config = new TurbineConfig( root, properties);
config.init();
}
catch (Exception e)
{
String msg = "PSML Importer: error initializing Turbine configuration";
logger.error(msg, e);
System.out.println(msg);
e.printStackTrace();
System.exit(0);
}
//
// get a handle to the exporter service
//
PsmlManagerService exporterService = null;
PsmlManagerService importerService = null;
try
{
exporterService = (PsmlManagerService)TurbineServices.getInstance().getService("PsmlImportManager");
}
catch (org.apache.turbine.services.InstantiationException e)
{
String msg = "PSML Importer: error loading Psml Exporter Service";
logger.error(msg, e);
System.out.println(msg);
e.printStackTrace();
System.exit(0);
}
//
// get a handle to the importer service
//
try
{
importerService = PsmlManager.getService();
}
catch (org.apache.turbine.services.InstantiationException e)
{
String msg = "PSML Importer: error loading Psml Importer Service";
logger.error(msg, e);
System.out.println(msg);
e.printStackTrace();
System.exit(0);
}
if (exporterService.getClass().getName().equals(importerService.getClass().getName()))
{
String msg = "PSML Importer Error: Importer Class cannot equal Exporter Class.";
logger.error(msg);
System.out.println(msg);
System.exit(0);
}
PsmlImporter importer = new PsmlImporter();
importer.setCheck(checkImport);
boolean ran = importer.run(exporterService, importerService);
if (ran)
{
System.out.println("**** PSML Importer - completed");
}
System.exit(1);
}
public boolean run(PsmlManagerService exporterService,
PsmlManagerService importerService)
{
String msg;
int count = 0;
try
{
if (check && alreadyImported())
return false;
msg = "Running with Importer Service: " + importerService.getClass();
System.out.println(msg);
logger.info(msg);
msg = "Running with Exporter Service: " + exporterService.getClass();
System.out.println(msg);
logger.info(msg);
QueryLocator locator = new QueryLocator(QueryLocator.QUERY_ALL);
count = exporterService.export(importerService, locator);
}
catch (Exception e)
{
System.out.println("Error importing: " + e.toString());
logger.error("Error importing: " , e);
e.printStackTrace();
return false;
}
msg = "PSMLImporter completed. Exported " + count + " profiles";
System.out.println(msg);
logger.info(msg);
return true;
}
/*
* Check to see if import has already completed.
* Only considers a "onetime" import, checking for the "admin" user.
*
* @return true if import was already ran.
*/
public boolean alreadyImported()
{
try
{
JetspeedUser user = JetspeedSecurity.getUser("admin");
QueryLocator ql = new QueryLocator(QueryLocator.QUERY_USER);
ql.setUser(user);
Iterator iterator = PsmlManager.query(ql);
if (iterator.hasNext())
{
String msg = "PSMLImporter: Detected database is populated. No need to import.";
System.out.println(msg);
logger.info(msg);
return true; // record found
}
return false; // record not found
}
catch (UnknownUserException e)
{
return false; // record not found
}
catch (JetspeedSecurityException e)
{
String msg = "Failed to run import: Database Access Error detecting database on import: ";
logger.error(msg, e);
System.out.println(msg + e.toString());
return true;
}
}
public void setCheck(boolean check)
{
this.check = check;
}
public boolean getCheck()
{
return this.check;
}
}