diff --git a/src/main/java/net/persei/dionysus/Data.java b/src/main/java/net/persei/dionysus/Data.java new file mode 100644 index 0000000..49a1ffa --- /dev/null +++ b/src/main/java/net/persei/dionysus/Data.java @@ -0,0 +1,24 @@ +package net.persei.dionysus; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +public class Data implements Serializable { + private static final long serialVersionUID = 825230953015875521L; + private Map map = new HashMap(); + + public Data(Data input) { + super(); + this.map = new HashMap(input.map); + } + public Data() { + super(); + } + public Object getEntry(String key) { + return map.get(key); + } + public Object setEntry(String key, Object obj) { + return map.put(key, obj); + } +} diff --git a/src/main/java/net/persei/dionysus/Main.java b/src/main/java/net/persei/dionysus/Main.java index 5842d8b..8f36dad 100644 --- a/src/main/java/net/persei/dionysus/Main.java +++ b/src/main/java/net/persei/dionysus/Main.java @@ -1,23 +1,39 @@ package net.persei.dionysus; +import java.io.IOException; + import net.persei.dionysus.exceptions.LibrariesNotFoundException; +import net.persei.dionysus.exceptions.LoaderException; +import net.persei.dionysus.files.FileManager; import uk.co.caprica.vlcj.binding.LibVlc; import uk.co.caprica.vlcj.discovery.NativeDiscovery; public class Main { public static final String TITLE = "Dionysus"; - private static PlayerGUI playerGUI; /** + * @throws ClassNotFoundException * @param args * @throws LibrariesNotFoundException + * @throws IOException + * @throws LoaderException + * @throws */ - public static void main(String[] args) throws LibrariesNotFoundException { + public static void main(String[] args) throws LibrariesNotFoundException, IOException, LoaderException, ClassNotFoundException { if (!findLibs()) throw new LibrariesNotFoundException(); - System.out.println(LibVlc.INSTANCE.libvlc_get_version()); + + Setup setup = new Setup(); + setup.getData().setEntry("test", "bla"); + + FileManager manager = new FileManager(); + manager.saveSetup("test.dio", setup); + setup = null; + setup = manager.loadSetup("test.dio"); + + System.out.println(setup.getData().getEntry("test")); } private static boolean findLibs() { diff --git a/src/main/java/net/persei/dionysus/Setup.java b/src/main/java/net/persei/dionysus/Setup.java index 2712b3f..75d0113 100644 --- a/src/main/java/net/persei/dionysus/Setup.java +++ b/src/main/java/net/persei/dionysus/Setup.java @@ -1,18 +1,25 @@ package net.persei.dionysus; +import java.io.Serializable; import java.util.LinkedList; import java.util.List; import net.persei.dionysus.blocks.InitialBlock; +import net.persei.dionysus.players.Player; -public class Setup { +public class Setup implements Serializable { + private static final long serialVersionUID = -5974881686360496618L; private List initBlocks = new LinkedList(); private List players = new LinkedList(); - + private Data data = new Data(); + // ugly, but necessary for flexible states - private List states = new LinkedList(){{ - push("none"); - }}; + private List states = new LinkedList(){ + private static final long serialVersionUID = 1L; + { + push("none"); + } + }; private int state = 0; public List getInitBlocks() { @@ -34,4 +41,7 @@ public class Setup { public List getStates() { return states; } + public Data getData() { + return data; + } } diff --git a/src/main/java/net/persei/dionysus/blocks/Block.java b/src/main/java/net/persei/dionysus/blocks/Block.java index 9565f33..c9f2213 100644 --- a/src/main/java/net/persei/dionysus/blocks/Block.java +++ b/src/main/java/net/persei/dionysus/blocks/Block.java @@ -1,11 +1,13 @@ package net.persei.dionysus.blocks; +import java.io.Serializable; import java.util.LinkedList; import java.util.List; -import net.persei.dionysus.exceptions.UnexpectedDataTypeException; +import net.persei.dionysus.Data; -public abstract class Block { +public abstract class Block implements Serializable { + private static final long serialVersionUID = 2452582891824176260L; protected String name; protected BlockType type; protected List lanes = new LinkedList(); diff --git a/src/main/java/net/persei/dionysus/blocks/BlockCondition.java b/src/main/java/net/persei/dionysus/blocks/BlockCondition.java index d5731bf..397fd95 100644 --- a/src/main/java/net/persei/dionysus/blocks/BlockCondition.java +++ b/src/main/java/net/persei/dionysus/blocks/BlockCondition.java @@ -2,6 +2,7 @@ package net.persei.dionysus.blocks; import java.util.Map; +import net.persei.dionysus.Data; import net.persei.dionysus.Setup; import net.persei.dionysus.exceptions.DataValueNotAvailableException; import net.persei.dionysus.exceptions.MalformedBlockConditionException; diff --git a/src/main/java/net/persei/dionysus/blocks/BlockHelper.java b/src/main/java/net/persei/dionysus/blocks/BlockHelper.java index 922a16d..3d6376c 100644 --- a/src/main/java/net/persei/dionysus/blocks/BlockHelper.java +++ b/src/main/java/net/persei/dionysus/blocks/BlockHelper.java @@ -3,6 +3,7 @@ package net.persei.dionysus.blocks; import java.util.LinkedList; import java.util.List; +import net.persei.dionysus.Data; import net.persei.dionysus.exceptions.UnexpectedDataTypeException; public class BlockHelper { diff --git a/src/main/java/net/persei/dionysus/blocks/ConditionalBlock.java b/src/main/java/net/persei/dionysus/blocks/ConditionalBlock.java index d20855f..1af5a06 100644 --- a/src/main/java/net/persei/dionysus/blocks/ConditionalBlock.java +++ b/src/main/java/net/persei/dionysus/blocks/ConditionalBlock.java @@ -1,4 +1,5 @@ package net.persei.dionysus.blocks; public abstract class ConditionalBlock extends Block { + private static final long serialVersionUID = 8895574016577951453L; } diff --git a/src/main/java/net/persei/dionysus/blocks/Data.java b/src/main/java/net/persei/dionysus/blocks/Data.java deleted file mode 100644 index b5791bc..0000000 --- a/src/main/java/net/persei/dionysus/blocks/Data.java +++ /dev/null @@ -1,15 +0,0 @@ -package net.persei.dionysus.blocks; - -import java.util.HashMap; -import java.util.Map; - -public class Data { - private Map map = new HashMap(); - - public Object getEntry(String key) { - return map.get(key); - } - public Object setEntry(String key, Object obj) { - return map.put(key, obj); - } -} diff --git a/src/main/java/net/persei/dionysus/blocks/DelayBlock.java b/src/main/java/net/persei/dionysus/blocks/DelayBlock.java index bb6747c..c3e1eae 100644 --- a/src/main/java/net/persei/dionysus/blocks/DelayBlock.java +++ b/src/main/java/net/persei/dionysus/blocks/DelayBlock.java @@ -1,6 +1,9 @@ package net.persei.dionysus.blocks; +import net.persei.dionysus.Data; + public class DelayBlock extends Block { + private static final long serialVersionUID = -3892822705334086078L; private long sleepTime = 1000; public long getSleepTime() { diff --git a/src/main/java/net/persei/dionysus/blocks/IfElseBlock.java b/src/main/java/net/persei/dionysus/blocks/IfElseBlock.java index 10fbadf..f885838 100644 --- a/src/main/java/net/persei/dionysus/blocks/IfElseBlock.java +++ b/src/main/java/net/persei/dionysus/blocks/IfElseBlock.java @@ -1,7 +1,9 @@ package net.persei.dionysus.blocks; +import net.persei.dionysus.Data; + public class IfElseBlock extends ConditionalBlock { - + private static final long serialVersionUID = 851005550879292074L; private BlockCondition condition; public IfElseBlock(BlockCondition condition) { diff --git a/src/main/java/net/persei/dionysus/blocks/InitialBlock.java b/src/main/java/net/persei/dionysus/blocks/InitialBlock.java index 00ffa59..7fb7701 100644 --- a/src/main/java/net/persei/dionysus/blocks/InitialBlock.java +++ b/src/main/java/net/persei/dionysus/blocks/InitialBlock.java @@ -3,11 +3,13 @@ package net.persei.dionysus.blocks; import java.util.LinkedList; import java.util.List; +import net.persei.dionysus.Data; import net.persei.dionysus.MidiTrigger; import net.persei.dionysus.Setup; import net.persei.dionysus.exceptions.UnexpectedDataTypeException; public abstract class InitialBlock extends Block { + private static final long serialVersionUID = 7065582566195305774L; protected List triggers = new LinkedList(); public List getTriggers() { diff --git a/src/main/java/net/persei/dionysus/blocks/Lane.java b/src/main/java/net/persei/dionysus/blocks/Lane.java index ae0cb72..5113889 100644 --- a/src/main/java/net/persei/dionysus/blocks/Lane.java +++ b/src/main/java/net/persei/dionysus/blocks/Lane.java @@ -1,11 +1,13 @@ package net.persei.dionysus.blocks; +import java.io.Serializable; import java.util.LinkedList; import java.util.List; -import net.persei.dionysus.exceptions.UnexpectedDataTypeException; +import net.persei.dionysus.Data; -public class Lane { +public class Lane implements Serializable { + private static final long serialVersionUID = -317193861413134584L; private List attachedBlocks = new LinkedList(); static private int count = 1; final private int id; diff --git a/src/main/java/net/persei/dionysus/blocks/MultiThreadBlock.java b/src/main/java/net/persei/dionysus/blocks/MultiThreadBlock.java new file mode 100644 index 0000000..c5d5416 --- /dev/null +++ b/src/main/java/net/persei/dionysus/blocks/MultiThreadBlock.java @@ -0,0 +1,45 @@ +package net.persei.dionysus.blocks; + +import net.persei.dionysus.Data; + +public class MultiThreadBlock extends Block { + private static final long serialVersionUID = -7687603755832903813L; + + public MultiThreadBlock(int n) { + super(); + for (int i = 0; i < n; i++) { + this.lanes.add(new Lane("thread lane " + i)); + } + this.name = "MultiThreadBlock"; + this.type = BlockType.MultiplexingBlock; + } + + private class LaneThread extends Thread { + private Lane lane; + private Data input; + private Block parent; + + public LaneThread (Data input, Lane lane, Block parent) { + this.input = input; + this.lane = lane; + this.parent = parent; + } + + public void run() { + try { + lane.invoke(input); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + @Override + public boolean magic(Data input, Lane lane) throws Exception { + for (Lane l : lanes) { + new LaneThread(input, l, this).start(); + } + return true; + } + +} diff --git a/src/main/java/net/persei/dionysus/blocks/SetDataBlock.java b/src/main/java/net/persei/dionysus/blocks/SetDataBlock.java index caebe57..f86d3cf 100644 --- a/src/main/java/net/persei/dionysus/blocks/SetDataBlock.java +++ b/src/main/java/net/persei/dionysus/blocks/SetDataBlock.java @@ -3,8 +3,10 @@ package net.persei.dionysus.blocks; import java.util.HashMap; import java.util.Map; +import net.persei.dionysus.Data; + public class SetDataBlock extends Block { - + private static final long serialVersionUID = 1007781353625719636L; private String data; private String key; diff --git a/src/main/java/net/persei/dionysus/blocks/SetStateBlock.java b/src/main/java/net/persei/dionysus/blocks/SetStateBlock.java index 85f2351..5970a81 100644 --- a/src/main/java/net/persei/dionysus/blocks/SetStateBlock.java +++ b/src/main/java/net/persei/dionysus/blocks/SetStateBlock.java @@ -1,9 +1,10 @@ package net.persei.dionysus.blocks; +import net.persei.dionysus.Data; import net.persei.dionysus.Setup; public class SetStateBlock extends Block { - + private static final long serialVersionUID = -6111464916913814484L; private String state; public SetStateBlock(String status) { diff --git a/src/main/java/net/persei/dionysus/blocks/SetupParser.java b/src/main/java/net/persei/dionysus/blocks/SetupParser.java deleted file mode 100644 index 6b58860..0000000 --- a/src/main/java/net/persei/dionysus/blocks/SetupParser.java +++ /dev/null @@ -1,63 +0,0 @@ -package net.persei.dionysus.blocks; - -import net.persei.dionysus.Setup; -import net.persei.dionysus.exceptions.MalformedSetupFileException; -import net.persei.dionysus.exceptions.WhatTheFuckException; - -public class SetupParser { - private enum Mode { - none, players, triggers, blocks - } - static public Setup parse(String file) throws MalformedSetupFileException, WhatTheFuckException { - String lines[] = file.split("\n"); - - Mode mode = Mode.none; - - for (int i = 0; i < lines.length; i++) { - String line = lines[i]; - if (line.length() == 0) - continue; - String tokens[] = line.split(" "); - for (int j = 0; j < tokens.length; j++) { - String token = tokens[j]; - if (token.length() == 0) - continue; - - // comment line - if (token.substring(0, 1).equals("#")) - break; - - // mode selection - if (token.equals("*players")) { - mode = Mode.players; - break; - } - if (token.equals("*triggers")) { - mode = Mode.triggers; - break; - } - if (token.equals("*blocks")) { - mode = Mode.blocks; - break; - } - - // TODO - switch(mode) { - case blocks: - break; - case players: - break; - case triggers: - break; - case none: - throw new MalformedSetupFileException(); - default: - throw new WhatTheFuckException(); - } - } - } - - - return null; - } -} diff --git a/src/main/java/net/persei/dionysus/blocks/SplitterBlock.java b/src/main/java/net/persei/dionysus/blocks/SplitterBlock.java index 64fae48..48ccc98 100644 --- a/src/main/java/net/persei/dionysus/blocks/SplitterBlock.java +++ b/src/main/java/net/persei/dionysus/blocks/SplitterBlock.java @@ -1,6 +1,9 @@ package net.persei.dionysus.blocks; +import net.persei.dionysus.Data; + public class SplitterBlock extends Block { + private static final long serialVersionUID = -5591009739089256605L; public SplitterBlock(int n) { super(); @@ -15,7 +18,7 @@ public class SplitterBlock extends Block { public boolean magic(Data input, Lane lane) throws Exception { boolean res = true; for (Lane l : lanes) { - res = l.invoke(input) && res; + res = l.invoke(new Data(input)) && res; } return res; } diff --git a/src/main/java/net/persei/dionysus/controlroom/Clickable.java b/src/main/java/net/persei/dionysus/controlroom/Clickable.java new file mode 100644 index 0000000..867b8a9 --- /dev/null +++ b/src/main/java/net/persei/dionysus/controlroom/Clickable.java @@ -0,0 +1,7 @@ +package net.persei.dionysus.controlroom; + +import java.awt.Event; + +public interface Clickable { + void click(Position relativePosition); +} diff --git a/src/main/java/net/persei/dionysus/controlroom/ControlPanelBlock.java b/src/main/java/net/persei/dionysus/controlroom/ControlPanelBlock.java new file mode 100644 index 0000000..fe1ef71 --- /dev/null +++ b/src/main/java/net/persei/dionysus/controlroom/ControlPanelBlock.java @@ -0,0 +1,9 @@ +package net.persei.dionysus.controlroom; + +import java.awt.Graphics; + +public interface ControlPanelBlock extends ControlPanelComponent, Clickable { + default void draw(Graphics graphics) { + + } +} diff --git a/src/main/java/net/persei/dionysus/controlroom/ControlPanelComponent.java b/src/main/java/net/persei/dionysus/controlroom/ControlPanelComponent.java new file mode 100644 index 0000000..71561e8 --- /dev/null +++ b/src/main/java/net/persei/dionysus/controlroom/ControlPanelComponent.java @@ -0,0 +1,9 @@ +package net.persei.dionysus.controlroom; + +import java.awt.Dimension; + +public interface ControlPanelComponent extends Drawable { + public Dimension getDimension(); + public void setPosition(Position position); + public Position getPosition(); +} diff --git a/src/main/java/net/persei/dionysus/controlroom/ControlRoom.java b/src/main/java/net/persei/dionysus/controlroom/ControlRoom.java index 4f54de6..678a1b2 100644 --- a/src/main/java/net/persei/dionysus/controlroom/ControlRoom.java +++ b/src/main/java/net/persei/dionysus/controlroom/ControlRoom.java @@ -44,10 +44,6 @@ public class ControlRoom extends JFrame { super.paintComponents(g); g.setColor(Color.BLACK); List initBlocks = setup.getInitBlocks(); - - for (int i = 0; i < initBlocks.size(); i++) { - - } } } } diff --git a/src/main/java/net/persei/dionysus/controlroom/Drawable.java b/src/main/java/net/persei/dionysus/controlroom/Drawable.java new file mode 100644 index 0000000..fd2a47f --- /dev/null +++ b/src/main/java/net/persei/dionysus/controlroom/Drawable.java @@ -0,0 +1,7 @@ +package net.persei.dionysus.controlroom; + +import java.awt.Graphics; + +public interface Drawable { + void draw(Graphics graphics); +} diff --git a/src/main/java/net/persei/dionysus/controlroom/Position.java b/src/main/java/net/persei/dionysus/controlroom/Position.java new file mode 100644 index 0000000..1fcd508 --- /dev/null +++ b/src/main/java/net/persei/dionysus/controlroom/Position.java @@ -0,0 +1,8 @@ +package net.persei.dionysus.controlroom; + +import java.awt.Point; + +public class Position extends Point { + private static final long serialVersionUID = -3324245757186935151L; + +} diff --git a/src/main/java/net/persei/dionysus/exceptions/LoaderException.java b/src/main/java/net/persei/dionysus/exceptions/LoaderException.java new file mode 100644 index 0000000..0b88caf --- /dev/null +++ b/src/main/java/net/persei/dionysus/exceptions/LoaderException.java @@ -0,0 +1,6 @@ +package net.persei.dionysus.exceptions; + +public class LoaderException extends Exception { + private static final long serialVersionUID = -1701002807913867876L; + +} diff --git a/src/main/java/net/persei/dionysus/exceptions/MalformedSetupFileException.java b/src/main/java/net/persei/dionysus/exceptions/MalformedSetupFileException.java deleted file mode 100644 index e4054ac..0000000 --- a/src/main/java/net/persei/dionysus/exceptions/MalformedSetupFileException.java +++ /dev/null @@ -1,10 +0,0 @@ -package net.persei.dionysus.exceptions; - -public class MalformedSetupFileException extends Exception { - - /** - * - */ - private static final long serialVersionUID = -2464874594169642335L; - -} diff --git a/src/main/java/net/persei/dionysus/exceptions/NoVersionInformationException.java b/src/main/java/net/persei/dionysus/exceptions/NoVersionInformationException.java new file mode 100644 index 0000000..9ecf98e --- /dev/null +++ b/src/main/java/net/persei/dionysus/exceptions/NoVersionInformationException.java @@ -0,0 +1,7 @@ +package net.persei.dionysus.exceptions; + + +public class NoVersionInformationException extends LoaderException { + private static final long serialVersionUID = -4262574113425711478L; + +} diff --git a/src/main/java/net/persei/dionysus/exceptions/WrongVersionException.java b/src/main/java/net/persei/dionysus/exceptions/WrongVersionException.java new file mode 100644 index 0000000..9bfc9b2 --- /dev/null +++ b/src/main/java/net/persei/dionysus/exceptions/WrongVersionException.java @@ -0,0 +1,13 @@ +package net.persei.dionysus.exceptions; + + +public class WrongVersionException extends LoaderException { + public final int version; + + public WrongVersionException(int version) { + this.version = version; + } + + private static final long serialVersionUID = -7423226308772215937L; + +} diff --git a/src/main/java/net/persei/dionysus/files/FileManager.java b/src/main/java/net/persei/dionysus/files/FileManager.java new file mode 100644 index 0000000..e913749 --- /dev/null +++ b/src/main/java/net/persei/dionysus/files/FileManager.java @@ -0,0 +1,38 @@ +package net.persei.dionysus.files; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +import net.persei.dionysus.Setup; +import net.persei.dionysus.exceptions.LoaderException; + +public class FileManager { + public Setup loadSetup(String file) throws IOException, ClassNotFoundException, LoaderException { + FileInputStream fStream = new FileInputStream(file); + ObjectInputStream oStream = new ObjectInputStream(fStream); + Object obj = oStream.readObject(); + oStream.close(); + fStream.close(); + + if (!(obj instanceof SetupFileHelper)) + throw new NoSetupObjectException(); + + SetupFileHelper helper = (SetupFileHelper) obj; + + return helper.getSetup(); + } + + public void saveSetup(String file, Setup setup) throws IOException { + SetupFileHelper holder = new SetupFileHelper(); + holder.setSetup(setup); + + FileOutputStream fStream = new FileOutputStream(file); + ObjectOutputStream oStream = new ObjectOutputStream(fStream); + oStream.writeObject(holder); + oStream.close(); + fStream.close(); + } +} diff --git a/src/main/java/net/persei/dionysus/files/NoSetupObjectException.java b/src/main/java/net/persei/dionysus/files/NoSetupObjectException.java new file mode 100644 index 0000000..1d29420 --- /dev/null +++ b/src/main/java/net/persei/dionysus/files/NoSetupObjectException.java @@ -0,0 +1,8 @@ +package net.persei.dionysus.files; + +import net.persei.dionysus.exceptions.LoaderException; + +public class NoSetupObjectException extends LoaderException { + private static final long serialVersionUID = -1038208370780426596L; + +} diff --git a/src/main/java/net/persei/dionysus/files/SetupFileHelper.java b/src/main/java/net/persei/dionysus/files/SetupFileHelper.java new file mode 100644 index 0000000..c77ce9e --- /dev/null +++ b/src/main/java/net/persei/dionysus/files/SetupFileHelper.java @@ -0,0 +1,20 @@ +package net.persei.dionysus.files; + +import java.io.Serializable; + +import net.persei.dionysus.Setup; + +public class SetupFileHelper implements Serializable { + private static final long serialVersionUID = 223487487950538107L; + + private Setup setup; + + public Setup getSetup() { + return setup; + } + + public void setSetup(Setup setup) { + this.setup = setup; + } + +} diff --git a/src/main/java/net/persei/dionysus/players/AudioPlayer.java b/src/main/java/net/persei/dionysus/players/AudioPlayer.java new file mode 100644 index 0000000..e90182d --- /dev/null +++ b/src/main/java/net/persei/dionysus/players/AudioPlayer.java @@ -0,0 +1,45 @@ +package net.persei.dionysus.players; + +import uk.co.caprica.vlcj.component.AudioMediaPlayerComponent; +import uk.co.caprica.vlcj.player.MediaPlayer; + +public class AudioPlayer implements Player { + + private AudioMediaPlayerComponent player; + private boolean loop = false; + private String name; + + public AudioPlayer(String name) { + this.name = name; + player = new AudioMediaPlayerComponent(); + } + + public boolean isLoop() { + return loop; + } + + public void playFile(String file) { + getMediaPlayer().playMedia(file); + } + + public void play() { + getMediaPlayer().play(); + } + + public void pause() { + getMediaPlayer().pause(); + } + + public void setLoop(boolean loop) { + this.loop = loop; + getMediaPlayer().setRepeat(loop); + } + + public MediaPlayer getMediaPlayer() { + return player.getMediaPlayer(); + } + + public String getName() { + return name; + } +} diff --git a/src/main/java/net/persei/dionysus/players/Player.java b/src/main/java/net/persei/dionysus/players/Player.java new file mode 100644 index 0000000..0640f7d --- /dev/null +++ b/src/main/java/net/persei/dionysus/players/Player.java @@ -0,0 +1,13 @@ +package net.persei.dionysus.players; + +import uk.co.caprica.vlcj.player.MediaPlayer; + +public interface Player { + boolean isLoop(); + void playFile(String file); + void play(); + void pause(); + void setLoop(boolean loop); + MediaPlayer getMediaPlayer(); + String getName(); +} diff --git a/src/main/java/net/persei/dionysus/players/VideoPlayer.java b/src/main/java/net/persei/dionysus/players/VideoPlayer.java new file mode 100644 index 0000000..947e79d --- /dev/null +++ b/src/main/java/net/persei/dionysus/players/VideoPlayer.java @@ -0,0 +1,81 @@ +package net.persei.dionysus.players; + +import java.awt.HeadlessException; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +import javax.swing.JFrame; + +import net.persei.dionysus.Main; + +import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent; +import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer; + +public class VideoPlayer extends JFrame implements Player { + + /** + * + */ + private static final long serialVersionUID = 6068058949441154348L; + + private EmbeddedMediaPlayerComponent player = new EmbeddedMediaPlayerComponent(); + + private boolean loop = false; + private boolean fullscreen = false; + + public boolean isFullscreen() { + return fullscreen; + } + + public VideoPlayer(boolean fullscreen) throws HeadlessException { + this(); + dispose(); + if (fullscreen) { + setExtendedState(JFrame.MAXIMIZED_BOTH); + setUndecorated(true); + } + setVisible(true); + } + public VideoPlayer() throws HeadlessException { + super(Main.TITLE); + setBounds(100, 100, 600, 400); + setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + setVisible(true); + + setContentPane(player); + + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + player.release(); + System.out.println("release"); + System.exit(0); + } + }); + } + + public boolean isLoop() { + return loop; + } + + public void setLoop(boolean loop) { + this.loop = loop; + getMediaPlayer().setRepeat(loop); + } + + public void playFile(String file) { + getMediaPlayer().playMedia(file); + } + + public void play() { + getMediaPlayer().play(); + } + + public void pause() { + getMediaPlayer().pause(); + } + + public EmbeddedMediaPlayer getMediaPlayer() { + return player.getMediaPlayer(); + } +} diff --git a/src/main/resources/keep b/src/main/resources/keep new file mode 100644 index 0000000..e69de29 diff --git a/src/test/java/keep b/src/test/java/keep new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/keep b/src/test/resources/keep new file mode 100644 index 0000000..e69de29