blob: 5b8f6a29da8e8ee9fb4a8482d5d98e9e31f70dd9 [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 convwatch;
import java.io.File;
import java.io.RandomAccessFile;
import helper.OSHelper;
public class SimpleFileSemaphore /* extends *//* implements */
{
String m_sInternSemaphoreFile;
File m_aInternSemaphoreFile;
GlobalLogWriter m_aLog;
public static void sleep( int _nSeconds)
{
// wait a second here
try
{
java.lang.Thread.sleep(_nSeconds * 1000);
}
catch (java.lang.InterruptedException e2)
{
}
}
public SimpleFileSemaphore() throws IllegalArgumentException
{
String sInternFileName;
if (OSHelper.isWindows())
{
sInternFileName = "C:/Temp/ConvwatchOOoSemaphore.txt";
}
else if (OSHelper.isUnix())
{
sInternFileName = "/tmp/ConvwatchOOoSemaphore.txt";
}
else
{
m_sInternSemaphoreFile = null;
throw new IllegalArgumentException("Unknown System, can't initialise SimpleFileSemaphore");
}
m_sInternSemaphoreFile = sInternFileName;
m_aInternSemaphoreFile = new File(sInternFileName);
}
public File getSemaphoreFile()
{
return m_aInternSemaphoreFile;
}
// ------------------------------------------------------------------------------
// wait until resource is available
public void P(File _aSemaphore)
{
int nCount = 0;
int nCheckLoop = 1;
while ( nCheckLoop == 1)
{
// check if resource is available, if not, wait.
if ( _aSemaphore.exists() )
{
m_aLog.get().println( "Active wait since " + nCount + "sec..");
nCount ++;
sleep( 1 );
}
else
{
sleep( 1 );
if ( _aSemaphore.exists() )
{
// ups
m_aLog.get().println( "ups...");
}
else
{
nCheckLoop = 0;
}
}
}
// block resource by ourself
try
{
RandomAccessFile aWriter = new RandomAccessFile(_aSemaphore, "rw");
aWriter.writeByte((int)1);
aWriter.close();
}
catch (java.io.FileNotFoundException fne)
{
m_aLog.get().println( "caught: FileNotFoundException");
}
catch(java.io.IOException ie)
{
m_aLog.get().println( "caught: IOException");
}
}
// ------------------------------------------------------------------------------
// block a resource
public void V(File _aSemaphore)
{
if ( _aSemaphore.exists() )
{
_aSemaphore.delete();
}
else
{
m_aLog.get().println("Could be a problem here? No resource block found.");
}
}
// --------------------------------- Unit test ---------------------------------
private static boolean SEMAPHORE_SHOULD_EXIST = true;
private static boolean SEMAPHORE_SHOULD_NOT_EXIST = false;
private static void assure(boolean _b, String _sText)
{
System.out.print(_sText);
System.out.print(" ");
if (_b)
{
System.out.println("ok");
}
else
{
System.out.println("FAILED");
}
}
private static void testSemaphoreFile(SimpleFileSemaphore a, boolean _bShouldFileExists)
{
System.out.println("Check if semaphore file exists.");
File aSemaphoreFile = a.getSemaphoreFile();
if (aSemaphoreFile.exists())
{
System.out.println("Name is: " + aSemaphoreFile.getAbsolutePath());
assure(_bShouldFileExists == SEMAPHORE_SHOULD_EXIST, "Semaphore should exist!");
}
else
{
assure(_bShouldFileExists == SEMAPHORE_SHOULD_NOT_EXIST, "Semaphore should not exist!");
}
}
public static void main( String[] argv )
{
SimpleFileSemaphore a = new SimpleFileSemaphore();
testSemaphoreFile(a, SEMAPHORE_SHOULD_NOT_EXIST);
a.P(a.getSemaphoreFile());
testSemaphoreFile(a, SEMAPHORE_SHOULD_EXIST);
a.V(a.getSemaphoreFile());
testSemaphoreFile(a, SEMAPHORE_SHOULD_NOT_EXIST);
}
}