1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-24 09:25:31 +02:00

[220126] [dstore][api][breaking] Single process server for multiple clients

This commit is contained in:
David McKnight 2008-03-28 15:31:34 +00:00
parent fa1290c248
commit 9296837517
32 changed files with 648 additions and 191 deletions

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2002, 2007 IBM Corporation and others.
* Copyright (c) 2002, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -12,7 +12,7 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
* Noriaki Takatsu (IBM) [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.dstore.core.miners;
@ -332,6 +332,7 @@ implements ISchemaExtender
*/
public final void setDataStore(DataStore dataStore)
{
super.setDataStore(dataStore);
_dataStore = dataStore;
DataElement root = _dataStore.getMinerRoot();

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2002, 2007 IBM Corporation and others.
* Copyright (c) 2002, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -12,15 +12,18 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
* Noriaki Takatsu (IBM) [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.dstore.core.miners;
import org.eclipse.dstore.core.server.SecuredThread;
import org.eclipse.dstore.core.model.DataStore;
/**
* MinerThread is a utility class used for doing threaded operations in a miner.
*/
public abstract class MinerThread extends Thread
public abstract class MinerThread extends SecuredThread
{
private volatile Thread minerThread;
@ -31,7 +34,15 @@ public abstract class MinerThread extends Thread
*/
public MinerThread()
{
super();
_isCancelled = false;
}
/**
* Constructor with dataStore
*/
public MinerThread(DataStore dataStore)
{
super(dataStore);
_isCancelled = false;
}
@ -62,6 +73,7 @@ public abstract class MinerThread extends Thread
*/
public void run()
{
super.run();
Thread thisThread = Thread.currentThread();
minerThread = thisThread;
//thisThread.setPriority(thisThread.getPriority()+1);

View file

@ -0,0 +1,52 @@
/*******************************************************************************
* Copyright (c) 2006, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: Noriaki Takatsu and Masao Nishimoto
*
* Contributors:
* Noriaki Takatsu (IBM) [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.dstore.core.model;
import org.eclipse.dstore.core.server.IServerLogger;
public class Client
{
public String _userid;
private IServerLogger _logger;
public void setUserid(String userid)
{
_userid = userid;
}
public String getUserid()
{
return _userid;
}
public void setLogger(IServerLogger logger)
{
_logger = logger;
}
public IServerLogger getLogger()
{
return _logger;
}
public String getProperty(String key)
{
return System.getProperty(key);
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2002, 2007 IBM Corporation and others.
* Copyright (c) 2002, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -17,6 +17,7 @@
* David McKnight (IBM) - 202822 findDeleted should not be synchronized
* David McKnight (IBM) [220123][dstore] Configurable timeout on irresponsiveness
* David McKnight (IBM) - [222168][dstore] Buffer in DataElement is not sent
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.dstore.core.model;
@ -159,6 +160,7 @@ public final class DataStore
private int _serverMinor;
private List _lastCreatedElements;
private Client _client;
/**
* Creates a new <code>DataStore</code> instance
@ -4384,4 +4386,25 @@ public final class DataStore
}
}
/**
* This method is used to set the Client object for each user.
*
* @param client the object of the Client class
*/
public void setClient(Client client)
{
_client = client;
}
/**
* This method is used to get the object of the Client stored for each user.
*
* @return the object of the Client stored for each user
*/
public Client getClient()
{
return _client;
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2002, 2007 IBM Corporation and others.
* Copyright (c) 2002, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -12,22 +12,23 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.dstore.core.model;
import org.eclipse.dstore.core.server.SecuredThread;
/**
* The Handler class is the base class for the threaded mechanisms in
* the DataStore. This is a thread that periodically does some activity.
* The frequency of handling can be configured.
*/
public abstract class Handler extends Thread
public abstract class Handler extends SecuredThread
{
protected int _waitIncrement;
protected DataStore _dataStore;
protected boolean _keepRunning;
/**
@ -63,7 +64,7 @@ public abstract class Handler extends Thread
*/
public void setDataStore(DataStore dataStore)
{
_dataStore = dataStore;
super.setDataStore(dataStore);
}
/**
@ -113,6 +114,7 @@ public abstract class Handler extends Thread
*/
public void run()
{
super.run();
while (_keepRunning)
{
/*

View file

@ -0,0 +1,51 @@
/*******************************************************************************
* Copyright (c) 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: Noriaki Takatsu and Masao Nishimoto
* Contributors:
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.dstore.core.server;
public interface IServerLogger
{
/**
* logInfo
*
* @param minerName
* @param message Message text to be logged.
*/
public void logInfo(String minerName, String message);
/**
* logWarning
*
* @param minerName
* @param message Message text to be logged.
*/
public void logWarning(String minerName, String message);
/**
* logError
*
* @param minerName
* @param message Message text to be logged.
* @param exception Exception that generated the error. Used to print a stack trace.
*/
public void logError(String minerName, String message, Throwable exception);
/**
* logDebugMessage
* @param minerName
* @param message Message text to be logged.
*/
public void logDebugMessage(String minerName, String message);
}

View file

@ -0,0 +1,29 @@
/*******************************************************************************
* Copyright (c) 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: Noriaki Takatsu and Masao Nishimoto
*
* Contributors:
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.dstore.core.server;
import org.eclipse.dstore.core.model.Client;
public interface ISystemService
{
/**
* This method is used to establish a thread-level security.
*
* @param client the object of the client
*/
public void setThreadSecurity(Client client);
}

View file

@ -0,0 +1,137 @@
/*******************************************************************************
* Copyright (c) 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: Noriaki Takatsu and Masao Nishimoto
*
* Contributors:
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.dstore.core.server;
import java.io.PrintWriter;
import org.eclipse.dstore.core.model.DataStore;
public class SecuredThread extends Thread
{
public DataStore _dataStore;
/**
* Constructs a new SecuredThread without a DataStore. In this case, the DataStore
* needs to be set sometime after creation via <code>setDataStore(DataStore)</code>.
*/
public SecuredThread() {
}
/**
* Constructs a new SecuredThread given a DataStore.
*
* @param dataStore used to extract user id and password for a client
*/
public SecuredThread(DataStore dataStore)
{
this(null, dataStore);
}
/**
* Constructs a new SecuredThread with a DataStore and a runnable. After
* the thread starts, the runnable will be implicitly executed.
*
* @param runnable the runnable to be executed by the thread
* @param dataStore used to extract user id and password for a client
*/
public SecuredThread(Runnable runnable, DataStore dataStore) {
super(runnable);
_dataStore = dataStore;
}
/**
* Constructs a new SecuredThread with a DataStore, a runnable and name for the thread.
* After the thread starts, the runnable will be implicitly executed.
*
* @param runnable the runnable to be executed by the thread
* @param threadName the name for the SecuredThread being created
* @param dataStore used to extract user id and password for a client
*/
public SecuredThread(Runnable runnable, String threadName, DataStore dataStore) {
this(null, runnable, threadName, dataStore);
}
/**
* Constructs a new SecuredThread with a DataStore, a runnable and a ThreadGroup.
* After the thread starts, the runnable will be implicitly executed.
*
* @param group the thread group for which this thread will belong
* @param runnable the runnable to be executed by the thread
* @param dataStore used to extract user id and password for a client
*/
public SecuredThread(ThreadGroup group, Runnable runnable, DataStore dataStore) {
super(group, runnable);
_dataStore = dataStore;
}
/**
* Constructs a new SecuredThread with a DataStore, a runnable, a name and a ThreadGroup.
* After the thread starts, the runnable will be implicitly executed.
*
* @param group the thread group for which this thread will belong
* @param runnable the runnable to be executed by the thread
* @param threadName the name for the SecuredThread being created
* @param dataStore used to extract user id and password for a client
*/
public SecuredThread(ThreadGroup group, Runnable runnable, String threadName, DataStore dataStore) {
super(group, runnable, threadName);
_dataStore = dataStore;
}
/**
* Sets the DataStore associated with the client
* @param dataStore
*/
public void setDataStore(DataStore dataStore)
{
_dataStore = dataStore;
}
/**
* When run() is called, a check is made to see if there is an ISystemService. If there is
* the <code>ISystemService.setThreadSecurity(Client)</code> is called before <code>Thread.run()</code>
* is called.
*
* If a Runnable was passed into the constructor for SecuredThread then, when <code>Thread.run()</code>
* is called, the Runnable will be invoked.
*/
public void run()
{
try
{
ISystemService systemService = SystemServiceManager.getInstance().getSystemService();
if (systemService != null){
systemService.setThreadSecurity(_dataStore.getClient());
}
}
catch (Throwable e)
{
e.printStackTrace(new PrintWriter(System.err));
}
super.run();
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2002, 2007 IBM Corporation and others.
* Copyright (c) 2002, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -12,7 +12,7 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.dstore.core.server;
@ -28,7 +28,7 @@ import org.eclipse.dstore.internal.core.server.ServerReturnCodes;
* the DataStore.
*
*/
public class Server
public class Server implements Runnable
{
private ConnectionEstablisher _establisher;
@ -161,4 +161,15 @@ public class Server
{
_establisher.start();
}
/**
* Return the reference for the ConnectionEstablisher for this client
*
* * @return the the reference for the ConnectionEstablisher instance for this client
*/
public ConnectionEstablisher getEstablisher()
{
return _establisher;
}
}

View file

@ -0,0 +1,68 @@
/*******************************************************************************
* Copyright (c) 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Initial Contributors:
* The following IBM employees contributed to the Remote System Explorer
* component that contains this file: Noriaki Takatsu and Masao Nishimoto
*
* Contributors:
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.dstore.core.server;
public class SystemServiceManager
{
private static SystemServiceManager instance = null;
private static ISystemService _systemService;
/**
* Creates an instance of SystemServiceManager to hold the system-specific
* parts that needs unique implementations for this system.
*
*/
private SystemServiceManager()
{}
/**
* Get the SystemServiceManager object for this system.
*
* @return the object of the SystemServiceManager
*/
public static SystemServiceManager getInstance()
{
if (instance == null)
{
instance = new SystemServiceManager();
}
return instance;
}
/**
* Set the SystemService object for this system.
*
* @param systemService the object of the SystemService
*/
public void setSystemService(ISystemService systemService)
{
_systemService = systemService;
}
/**
* Get the SystemService object for this system.
*
* @return the object of the SystemService stored in SystemServiceManager
*/
public ISystemService getSystemService()
{
return _systemService;
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2002, 2007 IBM Corporation and others.
* Copyright (c) 2002, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -14,6 +14,7 @@
* Contributors:
* David McKnight (IBM) [220123][dstore] Configurable timeout on irresponsiveness
* David McKnight (IBM) [220892][dstore] Backward compatibility: Server and Daemon should support old clients
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.dstore.internal.core.server;
@ -64,6 +65,7 @@ public class ConnectionEstablisher
private int _maxConnections;
private int _timeout;
private String _msg;
/**
@ -139,6 +141,31 @@ public class ConnectionEstablisher
{
return _dataStore;
}
/**
* Return the Server port opened for this client
*
* @return the Server port opened for this client
*/
public int getServerPort()
{
if (_serverSocket != null)
{
return _serverSocket.getLocalPort();
}
return -1;
}
/**
* Return the connection status for this client
*
* * @return the connection status for this client
*/
public String getStatus()
{
return _msg;
}
/**
* Tells the connection establisher to clean up and shutdown
@ -155,7 +182,7 @@ public class ConnectionEstablisher
_updateHandler.finish();
_dataStore.finish();
System.out.println(ServerReturnCodes.RC_FINISHED);
System.exit(0);
//System.exit(0);
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2002, 2007 IBM Corporation and others.
* Copyright (c) 2002, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -14,6 +14,7 @@
* Contributors:
* David McKnight (IBM) [220123][dstore] Configurable timeout on irresponsiveness
* David McKnight (IBM) [222003] Client remains connected after server terminates
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.dstore.internal.core.util;
@ -26,19 +27,18 @@ import java.net.UnknownHostException;
import org.eclipse.dstore.core.model.DataElement;
import org.eclipse.dstore.core.model.DataStore;
import org.eclipse.dstore.core.model.IDataStorePreferenceListener;
import org.eclipse.dstore.core.server.SecuredThread;
/**
* This class is used for receiving data from a socket in the DataStore
* communication layer.
*/
public abstract class Receiver extends Thread implements IDataStorePreferenceListener
public abstract class Receiver extends SecuredThread implements IDataStorePreferenceListener
{
private Socket _socket;
protected DataStore _dataStore;
private XMLparser _xmlParser;
private BufferedInputStream _in;
@ -51,9 +51,9 @@ public abstract class Receiver extends Thread implements IDataStorePreferenceLis
*/
public Receiver(Socket socket, DataStore dataStore)
{
super(dataStore);
setName("DStore Receiver"+getName()); //$NON-NLS-1$
_socket = socket;
_dataStore = dataStore;
_canExit = false;
_xmlParser = new XMLparser(dataStore);
@ -107,6 +107,7 @@ public abstract class Receiver extends Thread implements IDataStorePreferenceLis
*/
public void run()
{
super.run();
try
{
while (!_canExit)

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006, 2007 IBM Corporation and others.
* Copyright (c) 2006, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -15,6 +15,7 @@
* David McKnight (IBM) - [191599] use specified encoding for shell
* David McKnight (IBM) - [202822] canceled output should be created before thread cleanup
* David McKnight (IBM) - [196624] dstore miner IDs should be String constants rather than dynamic lookup
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.rse.dstore.universal.miners;

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2002, 2007 IBM Corporation and others.
* Copyright (c) 2002, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -14,11 +14,13 @@
* Contributors:
* {Name} (company) - description of contribution.
* David McKnight (IBM) - [196624] dstore miner IDs should be String constants rather than dynamic lookup
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.rse.dstore.universal.miners;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
@ -27,12 +29,13 @@ import java.util.List;
import org.eclipse.dstore.core.miners.Miner;
import org.eclipse.dstore.core.model.DE;
import org.eclipse.dstore.core.model.DataElement;
import org.eclipse.dstore.core.model.Client;
public class EnvironmentMiner extends Miner
{
private DataElement _system;
public void load()
{
getSystemNode();
@ -56,6 +59,19 @@ public class EnvironmentMiner extends Miner
public void extendSchema(DataElement schemaRoot)
{
if (_dataStore.getClient() != null)
{
ServerLogger logger = new ServerLogger(getUserPreferencesDirectory());
_dataStore.getClient().setLogger(logger);
}
else
{
Client client = new Client();
_dataStore.setClient(client);
ServerLogger logger = new ServerLogger(getUserPreferencesDirectory());
client.setLogger(logger);
}
DataElement envVar = _dataStore.createObjectDescriptor(schemaRoot, "Environment Variable"); //$NON-NLS-1$
_dataStore.createReference(envVar, _dataStore.createRelationDescriptor(schemaRoot,"Parent Environment")); //$NON-NLS-1$
DataElement containerObjectD = _dataStore.findObjectDescriptor("Container Object"); //$NON-NLS-1$
@ -229,4 +245,38 @@ public class EnvironmentMiner extends Miner
{
return "6.4.0"; //$NON-NLS-1$
}
/**
* getUserPreferencesDirectory() - returns directory on IFS where to store user settings
*/
public String getUserPreferencesDirectory()
{
String userPreferencesDirectory = _dataStore.getClient().getProperty("user.home"); //$NON-NLS-1$
String clientUserID = System.getProperty("client.username"); //$NON-NLS-1$
if (clientUserID == null || clientUserID.equals("")) //$NON-NLS-1$
{
clientUserID = ""; //$NON-NLS-1$
}
else
{
clientUserID += File.separator;
}
// append a '/' if not there
if ( userPreferencesDirectory.length() == 0 ||
userPreferencesDirectory.charAt( userPreferencesDirectory.length() -1 ) != File.separatorChar ) {
userPreferencesDirectory = userPreferencesDirectory + File.separator;
}
userPreferencesDirectory = userPreferencesDirectory + ".eclipse" + File.separator + //$NON-NLS-1$
"RSE" + File.separator + clientUserID; //$NON-NLS-1$
File dirFile = new File(userPreferencesDirectory);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
return userPreferencesDirectory;
}
}

View file

@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (c) 2002, 2006 IBM Corporation. All rights reserved.
* Copyright (c) 2002, 2008 IBM Corporation. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
@ -11,7 +11,7 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
********************************************************************************/
package org.eclipse.rse.dstore.universal.miners;
@ -22,9 +22,14 @@ import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.ResourceBundle;
import org.eclipse.dstore.core.server.IServerLogger;
public class ServerLogger {
/**
* Class that facilitates logging for errors, warnings, debug messages and info for DataStore
* servers.
*/
public class ServerLogger implements IServerLogger
{
// Constants for logging - for use in rsecomm.properties
@ -44,7 +49,9 @@ public class ServerLogger {
private static int log_level = 0;
/**
* Constructs a new ServerLogger.
*
* @param logPathName the path on the filesystem to store the log information
*/
public ServerLogger(String logPathName) {
if (_logFileStream == null) {
@ -84,13 +91,12 @@ public class ServerLogger {
/**
* logInfo
*
* @param minerName
* Logs an informational message
*
* @param minerName the name of the miner associated with this message
* @param message Message text to be logged.
*/
public static void logInfo(String minerName, String message) {
public void logInfo(String minerName, String message) {
if (log_level >= LOG_INFO) {
if (_logFileStream != null) {
synchronized(writeLock) {
@ -107,13 +113,12 @@ public class ServerLogger {
/**
* logWarning
*
* @param minerName
* Logs a warning message
*
* @param minerName the name of the miner associated with this message
* @param message Message text to be logged.
*/
public static void logWarning(String minerName, String message) {
public void logWarning(String minerName, String message) {
if (log_level >= LOG_WARNING) {
if (_logFileStream != null) {
synchronized(writeLock) {
@ -130,15 +135,14 @@ public class ServerLogger {
/**
* logError
*
* @param minerName
* Logs an error message
*
* @param minerName the name of the miner associated with this message
* @param message Message text to be logged.
*
* @param exception Exception that generated the error. Used to print a stack trace.
*/
public static void logError(String minerName, String message, Throwable exception) {
public void logError(String minerName, String message, Throwable exception) {
if (_logFileStream != null) {
synchronized(writeLock) {
try {
@ -156,13 +160,12 @@ public class ServerLogger {
/**
* logDebugMessage
*
* @param minerName
* Logs a debug message
*
* @param minerName the name of the miner associated with this message
* @param message Message text to be logged.
*/
public synchronized static void logDebugMessage(String minerName, String message) {
public synchronized void logDebugMessage(String minerName, String message) {
if (DEBUG && log_level == LOG_DEBUG) {
if (_logFileStream != null) {
synchronized(writeLock) {

View file

@ -30,6 +30,7 @@
* Xuan Chen (IBM) - [194481] [dstore][Archive] Save Conflict After Renaming a File that is Open
* David McKnight (IBM) - [209593] [api] add support for "file permissions" and "owner" properties for unix files
* Johnson Ma (Wind River) - [195402] Add tar.gz archive support
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.rse.dstore.universal.miners;
@ -120,7 +121,7 @@ public class UniversalFileSystemMiner extends Miner {
DataElement status = getCommandStatus(theElement);
DataElement subject = getCommandArgument(theElement, 0);
UniversalServerUtilities.logInfo(getName(), name + ":" + subject); //$NON-NLS-1$
UniversalServerUtilities.logInfo(getName(), name + ":" + subject, _dataStore); //$NON-NLS-1$
String queryType = (String) subject.getElementProperty(DE.P_TYPE);
boolean caseSensitive = !_isWindows;
@ -222,7 +223,7 @@ public class UniversalFileSystemMiner extends Miner {
return handleSetFilePermissions(subject, newPermissions, status);
} else {
UniversalServerUtilities.logError(CLASSNAME,
"Invalid query to handlecommand", null); //$NON-NLS-1$
"Invalid query to handlecommand", null, _dataStore); //$NON-NLS-1$
}
return statusDone(status);
}
@ -262,7 +263,7 @@ public class UniversalFileSystemMiner extends Miner {
}
// otherwise log error, and return as done
else {
UniversalServerUtilities.logError(CLASSNAME, "Invalid query type to handleSearch", null); //$NON-NLS-1$
UniversalServerUtilities.logError(CLASSNAME, "Invalid query type to handleSearch", null, _dataStore); //$NON-NLS-1$
return statusDone(status);
}
//If the subject is a virtual folder, we could not just use check file.exists() to determine if we need
@ -381,7 +382,7 @@ public class UniversalFileSystemMiner extends Miner {
else
{
UniversalServerUtilities.logError(CLASSNAME,
"Invalid query type to handleQueryAll", null); //$NON-NLS-1$
"Invalid query type to handleQueryAll", null, _dataStore); //$NON-NLS-1$
}
if (fileobj != null)
@ -478,7 +479,7 @@ public class UniversalFileSystemMiner extends Miner {
+ File.separatorChar + subject.getName());
else
UniversalServerUtilities.logError(CLASSNAME,
"Invalid query type to handleQueryFiles", null); //$NON-NLS-1$
"Invalid query type to handleQueryFiles", null, _dataStore); //$NON-NLS-1$
if (!fileobj.exists())
@ -535,7 +536,7 @@ public class UniversalFileSystemMiner extends Miner {
+ File.separatorChar + subject.getName());
else
UniversalServerUtilities.logError(CLASSNAME,
"Invalid query type to handleQueryFolders", null); //$NON-NLS-1$
"Invalid query type to handleQueryFolders", null, _dataStore); //$NON-NLS-1$
if (!fileobj.exists())
{
@ -733,7 +734,7 @@ public class UniversalFileSystemMiner extends Miner {
} catch (Exception e) {
UniversalServerUtilities.logError(CLASSNAME,
"handleSetreadOnly", e); //$NON-NLS-1$
"handleSetreadOnly", e, _dataStore); //$NON-NLS-1$
}
}
_dataStore.refresh(subject);
@ -775,7 +776,7 @@ public class UniversalFileSystemMiner extends Miner {
} catch (Exception e) {
UniversalServerUtilities.logError(CLASSNAME,
"handleSetLastModified", e); //$NON-NLS-1$
"handleSetLastModified", e, _dataStore); //$NON-NLS-1$
}
}
_dataStore.refresh(subject);
@ -933,7 +934,7 @@ public class UniversalFileSystemMiner extends Miner {
}
else {
UniversalServerUtilities.logError(CLASSNAME,
"Invalid query type to handleQueryGetRemoteObject", null); //$NON-NLS-1$
"Invalid query type to handleQueryGetRemoteObject", null, _dataStore); //$NON-NLS-1$
return statusDone(status);
}
@ -1048,7 +1049,7 @@ public class UniversalFileSystemMiner extends Miner {
status.setAttribute(DE.A_SOURCE, IServiceConstants.SUCCESS);
} else {
UniversalServerUtilities.logWarning(CLASSNAME,
"object does not exist"); //$NON-NLS-1$
"object does not exist", _dataStore); //$NON-NLS-1$
subject.setAttribute(DE.A_SOURCE, setProperties(child));
status
.setAttribute(DE.A_SOURCE,
@ -1226,7 +1227,7 @@ public class UniversalFileSystemMiner extends Miner {
socket.close();
}
catch (IOException e) {
UniversalServerUtilities.logError(CLASSNAME, "Can not get unused port", e); //$NON-NLS-1$
UniversalServerUtilities.logError(CLASSNAME, "Can not get unused port", e, _dataStore); //$NON-NLS-1$
port = -1;
}
@ -1387,7 +1388,7 @@ public class UniversalFileSystemMiner extends Miner {
} catch (IOException e) {
UniversalServerUtilities.logError(CLASSNAME,
"I/O error occured trying to read class file " + filePath, //$NON-NLS-1$
null);
null, _dataStore);
_dataStore.createObject(status, IUniversalDataStoreConstants.TYPE_QUALIFIED_CLASSNAME, "null"); //$NON-NLS-1$
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006, 2007 IBM Corporation and others.
* Copyright (c) 2006, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -12,8 +12,8 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
* David McKnight (IBM) - [196624] dstore miner IDs should be String constants rather than dynamic lookup
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.rse.dstore.universal.miners;
@ -89,7 +89,7 @@ public class UniversalProcessMiner extends Miner
if (subject == null) {
UniversalServerUtilities.logError(IUniversalProcessDataStoreConstants.UNIVERSAL_PROCESS_MINER, "Subject for UniversalProcessMiner command " + name + " is null", null); //$NON-NLS-1$ //$NON-NLS-2$
UniversalServerUtilities.logError(IUniversalProcessDataStoreConstants.UNIVERSAL_PROCESS_MINER, "Subject for UniversalProcessMiner command " + name + " is null", null, _dataStore); //$NON-NLS-1$ //$NON-NLS-2$
status.setAttribute(DE.A_NAME, "done"); //$NON-NLS-1$
return status;
}
@ -109,7 +109,8 @@ public class UniversalProcessMiner extends Miner
}
else
{
UniversalServerUtilities.logError(IUniversalProcessDataStoreConstants.UNIVERSAL_PROCESS_MINER, "Unknown filter command: " + name, null); //$NON-NLS-1$
UniversalServerUtilities.logError(IUniversalProcessDataStoreConstants.UNIVERSAL_PROCESS_MINER,
"Unknown filter command: " + name, null, _dataStore); //$NON-NLS-1$
status.setAttribute(DE.A_NAME, "done"); //$NON-NLS-1$
}
}
@ -125,13 +126,15 @@ public class UniversalProcessMiner extends Miner
}
else
{
UniversalServerUtilities.logError(IUniversalProcessDataStoreConstants.UNIVERSAL_PROCESS_MINER, "Unsupported process command: " + name, null); //$NON-NLS-1$
UniversalServerUtilities.logError(IUniversalProcessDataStoreConstants.UNIVERSAL_PROCESS_MINER,
"Unsupported process command: " + name, null, _dataStore); //$NON-NLS-1$
status.setAttribute(DE.A_NAME, "done"); //$NON-NLS-1$
}
}
else
{
UniversalServerUtilities.logError(IUniversalProcessDataStoreConstants.UNIVERSAL_PROCESS_MINER, "Unsupported subject for command: " + subject, null); //$NON-NLS-1$
UniversalServerUtilities.logError(IUniversalProcessDataStoreConstants.UNIVERSAL_PROCESS_MINER,
"Unsupported subject for command: " + subject, null, _dataStore); //$NON-NLS-1$
status.setAttribute(DE.A_NAME, "done"); //$NON-NLS-1$
}
@ -219,7 +222,7 @@ public class UniversalProcessMiner extends Miner
lookupProcesses(pfs, subject);
} catch (Exception e) {
e.printStackTrace();
UniversalServerUtilities.logError("UniversalProcessMiner", "handleQuery()", e); //$NON-NLS-1$ //$NON-NLS-2$
UniversalServerUtilities.logError("UniversalProcessMiner", "handleQuery()", e, _dataStore); //$NON-NLS-1$ //$NON-NLS-2$
status.setAttribute(DE.A_VALUE, e.getMessage());
status.setAttribute(DE.A_NAME, "done"); //$NON-NLS-1$
_dataStore.refresh(status);
@ -396,7 +399,7 @@ public class UniversalProcessMiner extends Miner
subject.setAttribute(DE.A_VALUE, result.getAllProperties());
}
} catch (Exception e) {
UniversalServerUtilities.logError("UniversalProcessMiner", "handleQuery()", e); //$NON-NLS-1$ //$NON-NLS-2$
UniversalServerUtilities.logError("UniversalProcessMiner", "handleQuery()", e, _dataStore); //$NON-NLS-1$ //$NON-NLS-2$
status.setAttribute(DE.A_VALUE, e.getMessage());
status.setAttribute(DE.A_NAME, "done"); //$NON-NLS-1$
_dataStore.refresh(status);

View file

@ -1,5 +1,5 @@
/********************************************************************************
* Copyright (c) 2002, 2006 IBM Corporation. All rights reserved.
* Copyright (c) 2002, 2008 IBM Corporation. All rights reserved.
* This program and the accompanying materials are made available under the terms
* of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html
@ -11,58 +11,16 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
********************************************************************************/
package org.eclipse.rse.dstore.universal.miners;
import java.io.File;
import org.eclipse.dstore.core.model.DataStore;
public class UniversalServerUtilities {
private static String _userPreferencesDirectory = null;
static {
new ServerLogger(getUserPreferencesDirectory());
}
/**
* getUserPreferencesDirectory() - returns directory on IFS where to store user settings
*/
public static String getUserPreferencesDirectory()
{
if (_userPreferencesDirectory == null) {
_userPreferencesDirectory = System.getProperty("user.home"); //$NON-NLS-1$
String clientUserID = System.getProperty("client.username"); //$NON-NLS-1$
if (clientUserID == null || clientUserID.equals("")) //$NON-NLS-1$
{
clientUserID = ""; //$NON-NLS-1$
}
else
{
clientUserID += File.separator;
}
// append a '/' if not there
if ( _userPreferencesDirectory.length() == 0 ||
_userPreferencesDirectory.charAt( _userPreferencesDirectory.length() -1 ) != File.separatorChar ) {
_userPreferencesDirectory = _userPreferencesDirectory + File.separator;
}
_userPreferencesDirectory = _userPreferencesDirectory + ".eclipse" + File.separator + //$NON-NLS-1$
"RSE" + File.separator + clientUserID; //$NON-NLS-1$
File dirFile = new File(_userPreferencesDirectory);
if (!dirFile.exists()) {
dirFile.mkdirs();
}
}
return _userPreferencesDirectory;
}
/**
* logInfo
*
@ -70,8 +28,9 @@ public class UniversalServerUtilities {
*
* @param message Message text to be logged.
*/
public static void logInfo(String minerName, String message) {
ServerLogger.logInfo(minerName, message);
public static void logInfo(String minerName, String message, DataStore dataStore)
{
dataStore.getClient().getLogger().logInfo(minerName, message);
}
/**
@ -81,8 +40,9 @@ public class UniversalServerUtilities {
*
* @param message Message text to be logged.
*/
public static void logWarning(String minerName, String message) {
ServerLogger.logWarning(minerName, message);
public static void logWarning(String minerName, String message, DataStore dataStore)
{
dataStore.getClient().getLogger().logWarning(minerName, message);
}
/**
@ -94,8 +54,9 @@ public class UniversalServerUtilities {
*
* @param exception Exception that generated the error. Used to print a stack trace.
*/
public static void logError(String minerName, String message, Throwable exception) {
ServerLogger.logError(minerName, message, exception);
public static void logError(String minerName, String message, Throwable exception, DataStore dataStore)
{
dataStore.getClient().getLogger().logError(minerName, message, exception);
}
/**
@ -105,8 +66,9 @@ public class UniversalServerUtilities {
*
* @param message Message text to be logged.
*/
public static void logDebugMessage(String minerName, String message) {
ServerLogger.logDebugMessage(minerName, message);
public static void logDebugMessage(String minerName, String message, DataStore dataStore)
{
dataStore.getClient().getLogger().logDebugMessage(minerName, message);
}
}

View file

@ -15,6 +15,7 @@
* {Name} (company) - description of contribution.
* David McKnight (IBM) - [202822] updating cleanup
* David McKnight (IBM) - [196624] dstore miner IDs should be String constants rather than dynamic lookup
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.command;
@ -36,7 +37,6 @@ import java.util.List;
import org.eclipse.dstore.core.miners.MinerThread;
import org.eclipse.dstore.core.model.DE;
import org.eclipse.dstore.core.model.DataElement;
import org.eclipse.dstore.core.model.DataStore;
import org.eclipse.dstore.core.model.DataStoreAttributes;
import org.eclipse.rse.dstore.universal.miners.CommandMiner;
import org.eclipse.rse.dstore.universal.miners.IUniversalDataStoreConstants;
@ -51,10 +51,7 @@ import org.eclipse.rse.internal.dstore.universal.miners.command.patterns.Pattern
*/
public class CommandMinerThread extends MinerThread
{
private DataElement _status;
private DataStore _dataStore;
private String _invocation;
private DataInputStream _stdInput;
@ -70,7 +67,7 @@ public class CommandMinerThread extends MinerThread
private DataElement _subject;
private String _cwdStr;
private OutputHandler _stdOutputHandler;
private OutputHandler _stdOutputHandler;
private OutputHandler _stdErrorHandler;
private boolean _isShell;
private boolean _isDone;
@ -87,10 +84,10 @@ public class CommandMinerThread extends MinerThread
public CommandMinerThread(DataElement theElement, String invocation, DataElement status, Patterns thePatterns, CommandMiner.CommandMinerDescriptors descriptors)
{
super(theElement.getDataStore());
_isShell = false;
_isDone = false;
_status = status;
_dataStore = theElement.getDataStore();
_descriptors = descriptors;
_subject = theElement;
@ -187,6 +184,15 @@ public class CommandMinerThread extends MinerThread
isSHonZ = true;
}
}
// In a single-process server, both user.home and HOME don't represent
// each client home directory.
if (_dataStore.getClient() != null)
{
if (var.startsWith("HOME")) //$NON-NLS-1$
{
env[i] = "HOME=" + _dataStore.getClient().getProperty("user.home"); //$NON-NLS-1$
}
}
}
@ -424,10 +430,12 @@ public class CommandMinerThread extends MinerThread
_stdOutputHandler = new OutputHandler(_stdInput, null, _isWindows || _isTTY, false, _isShell, this);
_stdOutputHandler.setWaitTime(100);
_stdOutputHandler.setDataStore(_dataStore);
_stdOutputHandler.start();
_stdErrorHandler = new OutputHandler(_stdError, null, _isWindows || _isTTY, true, _isShell, this);
_stdErrorHandler.setWaitTime(100);
_stdOutputHandler.setDataStore(_dataStore);
_stdErrorHandler.start();
if (didLogin && !userHome.equals(_cwdStr))

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006, 2007 IBM Corporation and others.
* Copyright (c) 2006, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -12,8 +12,8 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
* David McKnight (IBM) - [196624] dstore miner IDs should be String constants rather than dynamic lookup
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.command;
@ -28,27 +28,27 @@ import java.util.StringTokenizer;
import org.eclipse.dstore.core.model.DE;
import org.eclipse.dstore.core.model.DataElement;
import org.eclipse.dstore.core.model.DataStore;
import org.eclipse.dstore.core.server.SecuredThread;
import org.eclipse.rse.dstore.universal.miners.IUniversalDataStoreConstants;
/**
* QueryPathThread is used to determine available command completions
*/
public class QueryPathThread extends Thread
public class QueryPathThread extends SecuredThread
{
private DataStore _dataStore;
private DataElement _status;
public QueryPathThread(DataElement status)
{
super();
super(status.getDataStore());
_status = status;
_dataStore = status.getDataStore();
}
public void run()
{
super.run();
getPossibleCommands(_status);
}

View file

@ -9,9 +9,9 @@
* component that contains this file: David McKnight.
*
* Contributors:
* {Name} (company) - description of contribution.
* Kevin Doyle (IBM) - [191548] Deleting Read-Only directory removes it from view and displays no error
* Xuan Chen (IBM) - [200417] [regression][dstore] Rename an expanded folder in an Archive displays no children
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
********************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
@ -49,6 +49,8 @@ public class ArchiveQueryThread extends QueryThread {
}
public void run() {
super.run();
doQueryAll();
if (!isCancelled()) {
@ -333,7 +335,7 @@ public class ArchiveQueryThread extends QueryThread {
e.printStackTrace();
UniversalServerUtilities.logError(
UniversalFileSystemMiner.CLASSNAME,
"createDataElement failed with exception - isFile ", e); //$NON-NLS-1$
"createDataElement failed with exception - isFile ", e, _dataStore); //$NON-NLS-1$
}
} // end currentObj not 0

View file

@ -9,8 +9,8 @@
* component that contains this file: David McKnight.
*
* Contributors:
* {Name} (company) - description of contribution.
* Xuan Chen (IBM) - [209827] Update DStore command implementation to enable cancelation of archive operations
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
********************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
@ -38,6 +38,7 @@ public class CopyBatchThread extends CopyThread {
public void run()
{
super.run();
handleCopyBatch();
_isDone = true;
}

View file

@ -10,8 +10,8 @@
* component that contains this file: David McKnight.
*
* Contributors:
* {Name} (company) - description of contribution.
* Xuan Chen (IBM) - [209827] Update DStore command implementation to enable cancelation of archive operations
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
@ -41,6 +41,7 @@ public class CopySingleThread extends CopyThread {
public void run()
{
super.run();
handleCopy();
_isDone = true;
}

View file

@ -10,8 +10,8 @@
* component that contains this file: David McKnight.
*
* Contributors:
* {Name} (company) - description of contribution.
* Xuan Chen (IBM) - [209827] Update DStore command implementation to enable cancelation of archive operations
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
@ -27,8 +27,9 @@ import org.eclipse.rse.dstore.universal.miners.UniversalServerUtilities;
import org.eclipse.rse.services.clientserver.IServiceConstants;
import org.eclipse.rse.services.clientserver.PathUtility;
import org.eclipse.rse.services.clientserver.SystemOperationMonitor;
import org.eclipse.dstore.core.server.SecuredThread;
public class CopyThread extends Thread implements ICancellableHandler {
public class CopyThread extends SecuredThread implements ICancellableHandler {
protected DataElement targetFolder;
protected DataElement theElement;
@ -45,6 +46,7 @@ public class CopyThread extends Thread implements ICancellableHandler {
public CopyThread(DataElement targetFolder, DataElement theElement, UniversalFileSystemMiner miner, boolean isWindows, DataElement status)
{
super(theElement.getDataStore());
this.targetFolder = targetFolder;
this.theElement = theElement;
this.miner = miner;
@ -224,7 +226,7 @@ public class CopyThread extends Thread implements ICancellableHandler {
}
catch (Exception e)
{
UniversalServerUtilities.logError(CLASSNAME, "Exception is handleCopy", e); //$NON-NLS-1$
UniversalServerUtilities.logError(CLASSNAME, "Exception is handleCopy", e, _dataStore); //$NON-NLS-1$
status.setAttribute(DE.A_SOURCE, IServiceConstants.FAILED);
status.setAttribute(DE.A_VALUE, e.getMessage());
}

View file

@ -9,8 +9,8 @@
* component that contains this file: David McKnight.
*
* Contributors:
* {Name} (company) - description of contribution.
* Xuan Chen (IBM) - [209827] Update DStore command implementation to enable cancelation of archive operations
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
********************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
@ -28,12 +28,12 @@ import org.eclipse.rse.services.clientserver.SystemOperationMonitor;
import org.eclipse.rse.services.clientserver.archiveutils.AbsoluteVirtualPath;
import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager;
import org.eclipse.rse.services.clientserver.archiveutils.ISystemArchiveHandler;
import org.eclipse.dstore.core.server.SecuredThread;
public class CreateFileThread extends Thread implements ICancellableHandler {
public class CreateFileThread extends SecuredThread implements ICancellableHandler {
protected DataElement _subject;
protected DataElement _status;
private DataStore _dataStore;
protected UniversalFileSystemMiner _miner;
protected String _queryType;
@ -46,9 +46,9 @@ public class CreateFileThread extends Thread implements ICancellableHandler {
public CreateFileThread(DataElement theElement, String queryType, UniversalFileSystemMiner miner, DataStore dataStore, DataElement status)
{
super(dataStore);
this._subject = theElement;
this._miner = miner;
this._dataStore = dataStore;
this._status = status;
this._queryType = queryType;
}
@ -74,6 +74,8 @@ public class CreateFileThread extends Thread implements ICancellableHandler {
public void run()
{
super.run();
handleCreateFile();
_isDone = true;
}
@ -102,7 +104,7 @@ public class CreateFileThread extends Thread implements ICancellableHandler {
+ File.separatorChar + _subject.getName());
else
UniversalServerUtilities.logError(CLASSNAME,
"Invalid query type to handleCreateFile", null); //$NON-NLS-1$
"Invalid query type to handleCreateFile", null, _dataStore); //$NON-NLS-1$
if (filename != null)
{
@ -141,7 +143,7 @@ public class CreateFileThread extends Thread implements ICancellableHandler {
_status.setAttribute(DE.A_SOURCE, IServiceConstants.FAILED);
} catch (Exception e) {
UniversalServerUtilities.logError(CLASSNAME,
"handleCreateFile failed", e); //$NON-NLS-1$
"handleCreateFile failed", e, _dataStore); //$NON-NLS-1$
_status.setAttribute(DE.A_SOURCE, IServiceConstants.FAILED);
}
}

View file

@ -9,8 +9,8 @@
* component that contains this file: David McKnight.
*
* Contributors:
* {Name} (company) - description of contribution.
* Xuan Chen (IBM) - [209827] Update DStore command implementation to enable cancelation of archive operations
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
********************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
@ -28,12 +28,12 @@ import org.eclipse.rse.services.clientserver.SystemOperationMonitor;
import org.eclipse.rse.services.clientserver.archiveutils.AbsoluteVirtualPath;
import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager;
import org.eclipse.rse.services.clientserver.archiveutils.ISystemArchiveHandler;
import org.eclipse.dstore.core.server.SecuredThread;
public class CreateFolderThread extends Thread implements ICancellableHandler {
public class CreateFolderThread extends SecuredThread implements ICancellableHandler {
protected DataElement _subject;
protected DataElement _status;
private DataStore _dataStore;
protected UniversalFileSystemMiner _miner;
protected String _queryType;
@ -46,9 +46,9 @@ public class CreateFolderThread extends Thread implements ICancellableHandler {
public CreateFolderThread(DataElement theElement, String queryType, UniversalFileSystemMiner miner, DataStore dataStore, DataElement status)
{
super(dataStore);
this._subject = theElement;
this._miner = miner;
this._dataStore = dataStore;
this._status = status;
this._queryType = queryType;
}
@ -74,6 +74,7 @@ public class CreateFolderThread extends Thread implements ICancellableHandler {
public void run()
{
super.run();
handleCreateFile();
_isDone = true;
}
@ -107,7 +108,7 @@ public class CreateFolderThread extends Thread implements ICancellableHandler {
}
else
UniversalServerUtilities.logError(CLASSNAME,
"Invalid query type to handleCreateFolder", null); //$NON-NLS-1$
"Invalid query type to handleCreateFolder", null, _dataStore); //$NON-NLS-1$
if (filename != null)
{
@ -132,7 +133,7 @@ public class CreateFolderThread extends Thread implements ICancellableHandler {
} catch (Exception e) {
UniversalServerUtilities.logError(CLASSNAME,
"handleCreateFolder failed", e); //$NON-NLS-1$
"handleCreateFolder failed", e, _dataStore); //$NON-NLS-1$
_status.setAttribute(DE.A_SOURCE, IServiceConstants.FAILED);
}
}

View file

@ -10,8 +10,8 @@
* component that contains this file: David McKnight.
*
* Contributors:
* {Name} (company) - description of contribution.
* Xuan Chen (IBM) - [209827] Update DStore command implementation to enable cancelation of archive operations
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
@ -29,12 +29,12 @@ import org.eclipse.rse.services.clientserver.SystemOperationMonitor;
import org.eclipse.rse.services.clientserver.archiveutils.AbsoluteVirtualPath;
import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager;
import org.eclipse.rse.services.clientserver.archiveutils.ISystemArchiveHandler;
import org.eclipse.dstore.core.server.SecuredThread;
public class DeleteThread extends Thread implements ICancellableHandler {
public class DeleteThread extends SecuredThread implements ICancellableHandler {
protected DataElement _theElement;
protected DataElement _status;
private DataStore _dataStore;
protected UniversalFileSystemMiner _miner;
protected boolean _batch;
@ -47,9 +47,9 @@ public class DeleteThread extends Thread implements ICancellableHandler {
public DeleteThread(DataElement theElement, UniversalFileSystemMiner miner, DataStore dataStore, boolean batch, DataElement status)
{
super(dataStore);
this._theElement = theElement;
this._miner = miner;
this._dataStore = dataStore;
this._status = status;
this._batch = batch;
}
@ -75,6 +75,7 @@ public class DeleteThread extends Thread implements ICancellableHandler {
public void run()
{
super.run();
if (_batch)
{
handleDeleteBatch();
@ -124,7 +125,7 @@ public class DeleteThread extends Thread implements ICancellableHandler {
if (!deleteObj.exists()) {
thisStatus.setAttribute(DE.A_SOURCE, IServiceConstants.FAILED_WITH_DOES_NOT_EXIST + "|" + deleteObj.getAbsolutePath()); //$NON-NLS-1$
UniversalServerUtilities.logError(CLASSNAME,
"The object to delete does not exist", null); //$NON-NLS-1$
"The object to delete does not exist", null, _dataStore); //$NON-NLS-1$
} else {
try {
if (deleteObj.isFile()) {
@ -147,7 +148,7 @@ public class DeleteThread extends Thread implements ICancellableHandler {
if (deleteObj.delete() == false) {
thisStatus.setAttribute(DE.A_SOURCE, IServiceConstants.FAILED + "|" + deleteObj.getAbsolutePath()); //$NON-NLS-1$
UniversalServerUtilities.logError(CLASSNAME,
"Deletion of dir fialed", null); //$NON-NLS-1$
"Deletion of dir fialed", null, _dataStore); //$NON-NLS-1$
} else {
_dataStore.deleteObjects(subject);
DataElement parent = subject.getParent();
@ -160,13 +161,13 @@ public class DeleteThread extends Thread implements ICancellableHandler {
.logError(
CLASSNAME,
"The object to delete is neither a File or Folder! in handleDelete", //$NON-NLS-1$
null);
null, _dataStore);
}
} catch (Exception e) {
thisStatus.setAttribute(DE.A_SOURCE, IServiceConstants.FAILED_WITH_EXCEPTION + "|" + deleteObj.getAbsolutePath()); //$NON-NLS-1$
thisStatus.setAttribute(DE.A_VALUE, e.getLocalizedMessage());
UniversalServerUtilities.logError(CLASSNAME,
"Delete of the object failed", e); //$NON-NLS-1$
"Delete of the object failed", e, _dataStore); //$NON-NLS-1$
}
}
_dataStore.refresh(subject);
@ -219,14 +220,14 @@ public class DeleteThread extends Thread implements ICancellableHandler {
if (!(list[i].delete())) {
status.setAttribute(DE.A_SOURCE, IServiceConstants.FAILED);
UniversalServerUtilities.logWarning(CLASSNAME,
"Deletion of dir failed"); //$NON-NLS-1$
"Deletion of dir failed", _dataStore); //$NON-NLS-1$
}
} else {
deleteDir(list[i], status);
if (!(list[i].delete())) {
status.setAttribute(DE.A_SOURCE, IServiceConstants.FAILED);
UniversalServerUtilities.logWarning(CLASSNAME,
"Deletion of dir failed"); //$NON-NLS-1$
"Deletion of dir failed", _dataStore); //$NON-NLS-1$
}
}
}
@ -234,7 +235,7 @@ public class DeleteThread extends Thread implements ICancellableHandler {
status.setAttribute(DE.A_SOURCE, IServiceConstants.FAILED_WITH_EXCEPTION);
status.setAttribute(DE.A_VALUE, e.getLocalizedMessage());
UniversalServerUtilities.logError(CLASSNAME,
"Deletion of dir failed", e); //$NON-NLS-1$
"Deletion of dir failed", e, _dataStore); //$NON-NLS-1$
}
}

View file

@ -11,6 +11,7 @@
* Contributors:
* David McKnight (IBM) - [192884] Should not use filter to determine previous query results
* David McKnight (IBM) - [209387] Should not delete elements for files that still exist (but are filtered out)
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
********************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
@ -61,6 +62,8 @@ public class FileQueryThread extends QueryThread
public void run()
{
super.run();
doQueryAll();
if (!isCancelled())
@ -365,7 +368,7 @@ public class FileQueryThread extends QueryThread
} catch (Exception e) {
e.printStackTrace();
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME,
"createDataElement failed with exception - isFile ", e); //$NON-NLS-1$
"createDataElement failed with exception - isFile ", e, _dataStore); //$NON-NLS-1$
}
}

View file

@ -9,7 +9,7 @@
* component that contains this file: David McKnight.
*
* Contributors:
* {Name} (company) - description of contribution.
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
********************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
@ -17,26 +17,25 @@ import java.io.File;
import org.eclipse.dstore.core.model.DE;
import org.eclipse.dstore.core.model.DataElement;
import org.eclipse.dstore.core.model.DataStore;
import org.eclipse.dstore.core.model.DataStoreResources;
import org.eclipse.dstore.core.server.SecuredThread;
import org.eclipse.rse.dstore.universal.miners.ICancellableHandler;
import org.eclipse.rse.services.clientserver.IServiceConstants;
import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager;
import org.eclipse.rse.services.clientserver.archiveutils.VirtualChild;
public class QueryThread extends Thread implements ICancellableHandler {
public class QueryThread extends SecuredThread implements ICancellableHandler {
protected DataElement _subject;
protected DataElement _status;
protected boolean _isCancelled = false;
protected boolean _isDone = false;
protected DataStore _dataStore;
public QueryThread(DataElement subject, DataElement status)
{
super(subject.getDataStore());
_subject = subject;
_dataStore = _subject.getDataStore();
_status = status;
}

View file

@ -10,8 +10,8 @@
* component that contains this file: David McKnight.
*
* Contributors:
* {Name} (company) - description of contribution.
* Xuan Chen (IBM) - [209827] Update DStore command implementation to enable cancelation of archive operations
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
@ -28,12 +28,12 @@ import org.eclipse.rse.services.clientserver.SystemOperationMonitor;
import org.eclipse.rse.services.clientserver.archiveutils.AbsoluteVirtualPath;
import org.eclipse.rse.services.clientserver.archiveutils.ArchiveHandlerManager;
import org.eclipse.rse.services.clientserver.archiveutils.ISystemArchiveHandler;
import org.eclipse.dstore.core.server.SecuredThread;
public class RenameThread extends Thread implements ICancellableHandler {
public class RenameThread extends SecuredThread implements ICancellableHandler {
protected DataElement _subject;
protected DataElement _status;
private DataStore _dataStore;
protected UniversalFileSystemMiner _miner;
protected boolean _isCancelled = false;
@ -45,14 +45,13 @@ public class RenameThread extends Thread implements ICancellableHandler {
public RenameThread(DataElement theElement, UniversalFileSystemMiner miner, DataStore dataStore, DataElement status)
{
super(dataStore);
this._subject = theElement;
this._miner = miner;
this._dataStore = dataStore;
this._status = status;
}
public void cancel() {
_isCancelled = true;
@ -72,6 +71,7 @@ public class RenameThread extends Thread implements ICancellableHandler {
public void run()
{
super.run();
handleRename();
_isDone = true;
}
@ -134,7 +134,7 @@ public class RenameThread extends Thread implements ICancellableHandler {
} catch (Exception e) {
_status.setAttribute(DE.A_SOURCE, IServiceConstants.FAILED);
UniversalServerUtilities.logError(CLASSNAME,
"handleRename failed", e); //$NON-NLS-1$
"handleRename failed", e, _dataStore); //$NON-NLS-1$
}
}
_dataStore.refresh(_subject);

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2006, 2007 IBM Corporation and others.
* Copyright (c) 2006, 2008 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@ -12,8 +12,8 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
*
* Contributors:
* {Name} (company) - description of contribution.
* Xuan Chen (IBM) - [160775] [api] rename (at least within a zip) blocks UI thread
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
@ -37,13 +37,13 @@ import org.eclipse.rse.services.clientserver.IServiceConstants;
import org.eclipse.rse.services.clientserver.archiveutils.AbsoluteVirtualPath;
import org.eclipse.rse.services.clientserver.archiveutils.ISystemArchiveHandler;
import org.eclipse.rse.services.clientserver.archiveutils.VirtualChild;
import org.eclipse.dstore.core.server.SecuredThread;
public class UniversalDownloadHandler extends Thread implements ICancellableHandler
public class UniversalDownloadHandler extends SecuredThread implements ICancellableHandler
{
private boolean _isDone = false;
private DataStore _dataStore;
private UniversalFileSystemMiner _miner;
private DataElement _status;
private DataElement _cmdElement;
@ -52,14 +52,16 @@ public class UniversalDownloadHandler extends Thread implements ICancellableHand
public UniversalDownloadHandler(DataStore dataStore, UniversalFileSystemMiner miner, DataElement cmdElement,
DataElement status)
{
super(dataStore);
_miner = miner;
_dataStore = dataStore;
_status = status;
_cmdElement = cmdElement;
}
public void run()
{
super.run();
handleDownload(_cmdElement, _status);
_isDone = true;
}
@ -222,25 +224,25 @@ public class UniversalDownloadHandler extends Thread implements ICancellableHand
}
catch (FileNotFoundException e)
{
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME, "handleDownload: error reading file " + remotePath, e); //$NON-NLS-1$
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME, "handleDownload: error reading file " + remotePath, e, _dataStore); //$NON-NLS-1$
resultType = IUniversalDataStoreConstants.DOWNLOAD_RESULT_FILE_NOT_FOUND_EXCEPTION;
resultMessage = e.getLocalizedMessage();
}
catch (UnsupportedEncodingException e)
{
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME, "handleDownload: error reading file " + remotePath, e); //$NON-NLS-1$
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME, "handleDownload: error reading file " + remotePath, e, _dataStore); //$NON-NLS-1$
resultType = IUniversalDataStoreConstants.DOWNLOAD_RESULT_UNSUPPORTED_ENCODING_EXCEPTION;
resultMessage = e.getLocalizedMessage();
}
catch (IOException e)
{
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME, "handleDownload: error reading file " + remotePath, e); //$NON-NLS-1$
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME, "handleDownload: error reading file " + remotePath, e, _dataStore); //$NON-NLS-1$
resultType = IUniversalDataStoreConstants.DOWNLOAD_RESULT_IO_EXCEPTION;
resultMessage = e.getLocalizedMessage();
}
catch (Exception e)
{
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME, "handleDownload: error reading file " + remotePath, e); //$NON-NLS-1$
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME, "handleDownload: error reading file " + remotePath, e, _dataStore); //$NON-NLS-1$
resultType = IUniversalDataStoreConstants.DOWNLOAD_RESULT_EXCEPTION;
resultMessage = e.getLocalizedMessage();
}
@ -256,7 +258,7 @@ public class UniversalDownloadHandler extends Thread implements ICancellableHand
}
catch (IOException e)
{
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME, "handleDownload: error closing reader on " + remotePath, e); //$NON-NLS-1$
UniversalServerUtilities.logError(UniversalFileSystemMiner.CLASSNAME, "handleDownload: error closing reader on " + remotePath, e, _dataStore); //$NON-NLS-1$
resultType = IUniversalDataStoreConstants.DOWNLOAD_RESULT_IO_EXCEPTION;
resultMessage = e.getMessage();
}

View file

@ -16,6 +16,7 @@
* David McKnight (IBM) - [190010] cancelling search
* Xuan Chen (IBM) - [160775] [api] rename (at least within a zip) blocks UI thread
* David McKnight (IBM) - [214378] canonical path not required - problem is in the client
* Noriaki Takatsu (IBM) - [220126] [dstore][api][breaking] Single process server for multiple clients
*******************************************************************************/
package org.eclipse.rse.internal.dstore.universal.miners.filesystem;
@ -44,8 +45,9 @@ import org.eclipse.rse.services.clientserver.search.SystemSearchFileNameMatcher;
import org.eclipse.rse.services.clientserver.search.SystemSearchLineMatch;
import org.eclipse.rse.services.clientserver.search.SystemSearchStringMatchLocator;
import org.eclipse.rse.services.clientserver.search.SystemSearchStringMatcher;
import org.eclipse.dstore.core.server.SecuredThread;
public class UniversalSearchHandler extends Thread implements ICancellableHandler
public class UniversalSearchHandler extends SecuredThread implements ICancellableHandler
{
protected HashSet _alreadySearched;
@ -54,8 +56,7 @@ public class UniversalSearchHandler extends Thread implements ICancellableHandle
protected boolean _isCancelled;
protected boolean _isDone;
protected int _depth = -1;
protected DataStore _dataStore;
protected UniversalFileSystemMiner _miner;
protected DataElement _status;
@ -74,7 +75,7 @@ public class UniversalSearchHandler extends Thread implements ICancellableHandle
protected boolean _fsCaseSensitive;
public UniversalSearchHandler(DataStore dataStore, UniversalFileSystemMiner miner, SystemSearchString searchString, boolean fsCaseSensitive, File theFile, DataElement status) {
_dataStore = dataStore;
super(dataStore);
_miner = miner;
_searchString = searchString;
_fsCaseSensitive = fsCaseSensitive;
@ -113,12 +114,12 @@ public class UniversalSearchHandler extends Thread implements ICancellableHandle
}
public void run() {
super.run();
try {
internalSearch(_rootFile, _depth);
}
catch (Exception e) {
UniversalServerUtilities.logError(_miner.getName(), "Error occured when calling internal search", e); //$NON-NLS-1$
UniversalServerUtilities.logError(_miner.getName(), "Error occured when calling internal search", e, _dataStore); //$NON-NLS-1$
}
_isDone = true;
@ -299,7 +300,7 @@ public class UniversalSearchHandler extends Thread implements ICancellableHandle
virtualchildren = ArchiveHandlerManager.getInstance().getContents(archive, virtualPath);
}
catch (IOException e) {
UniversalServerUtilities.logError(_miner.getName(), "Error occured trying to get the canonical file", e); //$NON-NLS-1$
UniversalServerUtilities.logError(_miner.getName(), "Error occured trying to get the canonical file", e, _dataStore); //$NON-NLS-1$
}
if (virtualchildren != null) {
@ -361,7 +362,7 @@ public class UniversalSearchHandler extends Thread implements ICancellableHandle
return foundMatches;
}
catch (Exception e) {
UniversalServerUtilities.logError(_miner.getName(), "Error occured when trying to locate matches", e); //$NON-NLS-1$
UniversalServerUtilities.logError(_miner.getName(), "Error occured when trying to locate matches", e, _dataStore); //$NON-NLS-1$
remoteFile.setAttribute(DE.A_VALUE, e.getMessage());
return false;
}