134 lines
2.9 KiB
Java
134 lines
2.9 KiB
Java
package org.hwo.ui.windowstate;
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.ObjectInputStream;
|
|
import java.io.ObjectOutput;
|
|
import java.io.ObjectOutputStream;
|
|
import java.util.ArrayList;
|
|
import java.util.Hashtable;
|
|
import java.util.LinkedList;
|
|
import java.util.List;
|
|
|
|
import javax.swing.JFrame;
|
|
|
|
import org.hwo.ByteArrayHexlifier;
|
|
|
|
public class WindowManager {
|
|
|
|
private static WindowManager instance;
|
|
|
|
public static WindowManager getInstance()
|
|
{
|
|
return instance;
|
|
}
|
|
|
|
|
|
Hashtable<Class<? extends JFrame>, StatedWindowManager> windowManagers;
|
|
|
|
protected WindowManager()
|
|
{
|
|
windowManagers = new Hashtable<Class<? extends JFrame>, StatedWindowManager>();
|
|
}
|
|
|
|
public void registerWindowManager(StatedWindowManager manager)
|
|
{
|
|
windowManagers.put(manager.getManagedClass(), manager);
|
|
}
|
|
|
|
public StatedWindowManager getStatedWindowManager(Class<? extends JFrame> clazz)
|
|
{
|
|
return windowManagers.get(clazz);
|
|
}
|
|
|
|
public StatedWindowManager getStatedWindowManager(String clazz)
|
|
{
|
|
for (StatedWindowManager manager: windowManagers.values())
|
|
{
|
|
if (manager.getManagedClass().getName().equals(clazz))
|
|
return manager;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public void restoreWindows(String states)
|
|
{
|
|
Hashtable<String, ArrayList<String>> htstates;
|
|
try
|
|
{
|
|
ByteArrayInputStream bis = new ByteArrayInputStream(ByteArrayHexlifier.stringToByteArray(states));
|
|
ObjectInputStream ois = new ObjectInputStream(bis);
|
|
htstates = (Hashtable<String, ArrayList<String>>)ois.readObject();
|
|
ois.close();
|
|
bis.close();
|
|
|
|
for (String fclazz: htstates.keySet())
|
|
{
|
|
System.err.println("Restoring Windows of Class: " + fclazz);
|
|
StatedWindowManager manager = getStatedWindowManager(fclazz);
|
|
if (manager != null)
|
|
{
|
|
manager.restoreWindows(htstates.get(fclazz).toArray(new String[]{}));
|
|
}
|
|
}
|
|
|
|
} catch (Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
List<Class<? extends JFrame>> getKnownWindowClasses()
|
|
{
|
|
return new ArrayList<Class<? extends JFrame>>(windowManagers.keySet());
|
|
}
|
|
|
|
public String saveWindows()
|
|
{
|
|
Hashtable<String, ArrayList<String>> states = new Hashtable<String, ArrayList<String>>();
|
|
|
|
for (Class<? extends JFrame> wc: getKnownWindowClasses())
|
|
{
|
|
ArrayList<String> wcstates = new ArrayList<String>();
|
|
|
|
for (String ws: windowManagers.get(wc).saveWindows())
|
|
wcstates.add(ws);
|
|
|
|
states.put(wc.getName(), wcstates);
|
|
}
|
|
try
|
|
{
|
|
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
ObjectOutputStream oos = new ObjectOutputStream(bos);
|
|
oos.writeObject(states);
|
|
oos.close();
|
|
bos.close();
|
|
|
|
return ByteArrayHexlifier.byteArrayToString(bos.toByteArray());
|
|
|
|
} catch (Exception e)
|
|
{
|
|
e.printStackTrace();
|
|
}
|
|
|
|
|
|
|
|
return "";
|
|
}
|
|
|
|
public void closeAllWindows()
|
|
{
|
|
for (StatedWindowManager manager: windowManagers.values())
|
|
{
|
|
manager.closeAllWindows();
|
|
}
|
|
}
|
|
|
|
|
|
static {
|
|
instance = new WindowManager();
|
|
}
|
|
|
|
|
|
}
|