this.searchManager = searchManager;
final String commandSuffix = searchManager.getWsId() + "-" + (searchManager.parentSearchManager == null);
final File indexDirectory = searchManager.getIndexDirectory();
changeIndexMode = rpcService.registerCommand(new RemoteCommand()
{
public String getId()
{
return "org.exoplatform.services.jcr.impl.core.query.IndexRecoveryImpl-changeIndexMode-" + commandSuffix;
}
public Serializable execute(Serializable[] args) throws Throwable
{
boolean isOnline = (Boolean)args[0];
searchManager.setOnline(isOnline, false, false);
IndexRecoveryImpl.this.isOnline = isOnline;
return null;
}
});
getIndexList = rpcService.registerCommand(new RemoteCommand()
{
public String getId()
{
return "org.exoplatform.services.jcr.impl.core.query.IndexRecoveryImpl-getIndexList-" + commandSuffix;
}
public Serializable execute(Serializable[] args) throws Throwable
{
return SecurityHelper.doPrivilegedIOExceptionAction(new PrivilegedExceptionAction<ArrayList<String>>()
{
public ArrayList<String> run() throws IOException
{
int indexDirLen = indexDirectory.getAbsolutePath().length();
ArrayList<String> result = new ArrayList<String>();
for (File file : DirectoryHelper.listFiles(indexDirectory))
{
if (!file.isDirectory())
{
// if parent directory is not "offline" then add this file. Otherwise skip it.
if (!file.getParent().endsWith(OfflinePersistentIndex.NAME))
{
result.add(file.getAbsolutePath().substring(indexDirLen));
}
}
}
return result;
}
});
}
});
getIndexFile = rpcService.registerCommand(new RemoteCommand()
{
public String getId()
{
return "org.exoplatform.services.jcr.impl.core.query.IndexRecoveryImpl-getIndexFile-" + commandSuffix;
}
public Serializable execute(Serializable[] args) throws Throwable
{
String filePath = (String)args[0];
long offset = (Long)args[1];
RandomAccessFile file = new RandomAccessFile(new File(indexDirectory, filePath), "r");
file.seek(offset);
byte[] buffer = new byte[BUFFER_SIZE];
int len = file.read(buffer);
if (len == -1)
{
return null;
}
else
{
byte[] data = new byte[len];
System.arraycopy(buffer, 0, data, 0, len);
return data;
}
}
});
requestForResponsibleToSetIndexOnline = rpcService.registerCommand(new RemoteCommand()
{
public String getId()
{
return "org.exoplatform.services.jcr.impl.core.query.IndexRecoveryImpl-requestForResponsibleToSetIndexOnline-"
+ commandSuffix;
}
public Serializable execute(Serializable[] args) throws Throwable
{
return isResponsibleToSetIndexOnline;
}
});
checkIndexReady = rpcService.registerCommand(new RemoteCommand()
{
public String getId()
{
return "org.exoplatform.services.jcr.impl.core.query.IndexRecoveryImpl-checkIndexIsReady-" + commandSuffix;
}