package org.rzo.yajsw.os.posix;
import java.util.HashSet;
import java.util.Set;
public class UpdateRcParser
{
Set<String> _startLinks = new HashSet<String>();
Set<String> _stopLinks = new HashSet<String>();
String _runLevelDir;
String _serviceName;
String _stopLevels = "";
String _startLevels = "";
public UpdateRcParser(String property, String runLevelDir, String serviceName)
{
if (runLevelDir == null || "".equals(runLevelDir))
return;
if (serviceName == null || "".equals(serviceName))
return;
_runLevelDir = runLevelDir;
_serviceName = serviceName;
if (property == null || "".equals(property))
setDefault();
else
setLinks(property);
}
private void setDefault()
{
setDefaultStartLinks(20);
setDefaultStopLinks(20);
}
private void setDefaultStopLinks(int priority)
{
addStopLink(0, priority);
addStopLink(1, priority);
addStopLink(6, priority);
}
private void addStopLink(int level, int priority)
{
_stopLinks.add(_runLevelDir.replaceFirst("X", "" + level) + "/K" + priority + _serviceName);
}
private void setDefaultStartLinks(int priority)
{
addStartLink(2, priority);
addStartLink(3, priority);
addStartLink(4, priority);
addStartLink(5, priority);
}
private void addStartLink(int level, int priority)
{
_startLinks.add(_runLevelDir.replaceFirst("X", "" + level) + "/S" + priority + _serviceName);
}
private void setLinks(String property)
{
try
{
String[] x = property.split(" ");
if (x.length == 1)
{
int priority = Integer.parseInt(x[0]);
setDefaultStartLinks(priority);
setDefaultStopLinks(priority);
}
else if (x.length == 2)
{
int startPriority = Integer.parseInt(x[0]);
int stopPriority = Integer.parseInt(x[1]);
setDefaultStartLinks(startPriority);
setDefaultStopLinks(stopPriority);
}
else
{
int i = 0;
int priority;
String txt;
while (i < x.length)
{
txt = x[i++];
if (txt.trim().equals("start"))
{
priority = Integer.parseInt(x[i++]);
while (i < x.length && !".".equals(x[i].trim()))
{
int level = Integer.parseInt(x[i++]);
addStartLink(level, priority);
_startLevels += level + " ";
}
}
else if (txt.trim().equals("stop"))
{
priority = Integer.parseInt(x[i++]);
while (i < x.length && !".".equals(x[i].trim()))
{
int level = Integer.parseInt(x[i++]);
addStopLink(level, priority);
_stopLevels += level + " ";
}
}
}
}
}
catch (Exception ex)
{
System.out.println("error parsing wrapper.daemon.update_rc " + ex);
}
}
public Set<String> getStopLinks()
{
return _stopLinks;
}
public Set<String> getStartLinks()
{
return _startLinks;
}
public static void main(String[] args)
{
UpdateRcParser p;
p = new UpdateRcParser(null, "/etc/rcX.d", "serviceName");
System.out.println(p.getStartLinks());
System.out.println(p.getStopLinks());
p = new UpdateRcParser("91", "/etc/rcX.d", "serviceName");
System.out.println(p.getStartLinks());
System.out.println(p.getStopLinks());
p = new UpdateRcParser("20 80", "/etc/rcX.d", "serviceName");
System.out.println(p.getStartLinks());
System.out.println(p.getStopLinks());
p = new UpdateRcParser("start 20 2 3 4 . start 30 5 . stop 80 0 1 6", "/etc/rcX.d", "serviceName");
System.out.println(p.getStartLinks());
System.out.println(p.getStopLinks());
}
public String getStopLevels()
{
return _stopLevels;
}
public String getStartLevels()
{
return _startLevels;
}
}