package code.kalter.longflight; import code.kalter.longflight.crypto.CIStream; import java.io.IOException; import java.io.InputStream; import java.util.Vector; import javax.microedition.lcdui.Image; import javax.microedition.media.Manager; import javax.microedition.media.MediaException; import javax.microedition.media.Player; /** * Дабы избежать повторных загрузок из разных мест программы, а так же * обеспечить загрузку с расшифкой создан это класс * * @author KalterFive */ public class Loader { private static final int KEY = 5; // шифровальный XOR ключ private static Loader instance; public static Loader getInstance() { if (instance == null) { instance = new Loader(); } return instance; } private final Vector dump; // все успешно загруженные ресурсы private Loader() { dump = new Vector(); } public Object getObject(String path) { Object result = null; for (int i = 0; i < dump.size(); i++) { ObjectItem item = (ObjectItem) dump.elementAt(i); if (item.get(path) != null) { result = item.get(path); break; } } return result; } public Image getImage(String path) throws IOException { Image result = (Image) getObject(path); if (result == null) { final InputStream istream = getClass().getResourceAsStream(path); final InputStream cistream = new CIStream(istream, KEY); result = Image.createImage(cistream); cistream.close(); dump.addElement(new ObjectItem(result, path)); } return result; } public Player getPlayer(String path, String type) throws IOException, MediaException { Player result = (Player) getObject(path); if (result == null) { final InputStream iStream = getClass().getResourceAsStream(path); result = Manager.createPlayer(iStream, type); dump.addElement(new ObjectItem(result, path)); } return result; } }