summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/YalpAuth/YalpPGSqlAuth/DatabaseDefines.java65
-rw-r--r--src/YalpAuth/YalpPGSqlAuth/YalpAuthInterfaceImpl.java137
-rw-r--r--src/YalpAuth/YalpPGSqlAuth/YalpPGSqlAuth.java32
-rwxr-xr-xsrc/YalpClients/ClientConfiguration.java113
-rw-r--r--src/YalpClients/SwtClient/GUI/GUI.java2101
-rw-r--r--src/YalpClients/SwtClient/GUI/InitGUI.java58
-rw-r--r--src/YalpClients/SwtClient/GUI/LoadDialog.java110
-rw-r--r--src/YalpClients/SwtClient/GUI/SWTResourceManager.java145
-rw-r--r--src/YalpClients/SwtClient/GUI/SortListener.java63
-rw-r--r--src/YalpClients/SwtClient/GUI/StartDialog.java236
-rwxr-xr-xsrc/YalpClients/SwtClient/Model.java744
-rwxr-xr-xsrc/YalpClients/SwtClient/SwtClient.java61
-rw-r--r--src/YalpInputs/YalpPGSqlInput/DatabaseDefines.java65
-rw-r--r--src/YalpInputs/YalpPGSqlInput/PGSqlInput.java123
-rw-r--r--src/YalpInputs/YalpPGSqlInput/YalpInputPluginImpl.java189
-rw-r--r--src/YalpInputs/YalpPGSqlInput/YalpPGSqlInput.java33
-rw-r--r--src/YalpInputs/YalpPGSqlInput/db-design-backup.sql321
-rw-r--r--src/YalpOutputs/YalpVlcTelnetOutput/TelnetInterface.java147
-rw-r--r--src/YalpOutputs/YalpVlcTelnetOutput/VlcStreamer.java145
-rw-r--r--src/YalpOutputs/YalpVlcTelnetOutput/YalpOutputPluginImpl.java371
-rw-r--r--src/YalpOutputs/YalpVlcTelnetOutput/YalpVlcTelnetOutput.java20
-rwxr-xr-xsrc/YalpServer/FileBrowser.java175
-rwxr-xr-xsrc/YalpServer/FileFinder.java110
-rwxr-xr-xsrc/YalpServer/FileInfoManager.java126
-rwxr-xr-xsrc/YalpServer/InitServer.java283
-rwxr-xr-xsrc/YalpServer/ServerControlImpl.java385
-rwxr-xr-xsrc/YalpServer/ServerSettings.java68
-rwxr-xr-xsrc/YalpServer/YalpServer.java40
-rw-r--r--src/yalp.idl265
29 files changed, 6731 insertions, 0 deletions
diff --git a/src/YalpAuth/YalpPGSqlAuth/DatabaseDefines.java b/src/YalpAuth/YalpPGSqlAuth/DatabaseDefines.java
new file mode 100644
index 0000000..5ff92c7
--- /dev/null
+++ b/src/YalpAuth/YalpPGSqlAuth/DatabaseDefines.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+package YalpAuth.YalpPGSqlAuth;
+
+/*
+ * Class DatabaseDefines
+ *
+ * <em></em>
+ *
+ * @author Manuel Traut
+ *
+ * @version 0.1 28-08-2008<br>
+ *
+ */
+
+public class DatabaseDefines {
+
+ public String dbConnection="jdbc:postgresql://10.0.3.20:5432/yalp_user";
+ public String dbUser="yalp";
+ public String dbPasswd="huhu";
+
+/*
+ * set string for dbConnection
+ * @param dbConnection
+ * "jdbc:postgresql://<serverIP>:<portOfDB>/<dataBaseName>";
+ */
+ public void setDBConnection(String dbConnection){
+ this.dbConnection = dbConnection;
+ }
+
+/*
+ * set userName for db Edit
+ * @param dbUser
+ */
+ public void setDBUser(String dbUser){
+ this.dbUser = dbUser;
+ }
+
+/*
+ * set string for db Password
+ * @param DBPasswd
+ */
+ public void setDBPasswd(String DBPasswd){
+ this.dbPasswd = DBPasswd;
+ }
+
+ public String getDBConnection(){
+ return this.dbConnection;
+ }
+
+ public String getDBUser(){
+ return this.dbUser;
+ }
+
+ public String getDBPasswd(){
+ return this.dbPasswd;
+ }
+}
diff --git a/src/YalpAuth/YalpPGSqlAuth/YalpAuthInterfaceImpl.java b/src/YalpAuth/YalpPGSqlAuth/YalpAuthInterfaceImpl.java
new file mode 100644
index 0000000..b87bce3
--- /dev/null
+++ b/src/YalpAuth/YalpPGSqlAuth/YalpAuthInterfaceImpl.java
@@ -0,0 +1,137 @@
+package YalpAuth.YalpPGSqlAuth;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.*;
+import java.sql.*;
+
+import YalpInterfaces.*;
+
+public class YalpAuthInterfaceImpl {
+ private String db;
+ private String dbuser;
+ private String dbpasswd;
+ private Statement stat;
+ private Connection con;
+
+/*
+ * Constructor establishes connection to Database Server
+ *
+ * @param db
+ * jdbc Connection to database
+ * @param dbYalpUser
+ * userName for database
+ * @param dbPasswd
+ * password for database
+ */
+ public YalpAuthInterfaceImpl(String db, String dbYalpUser, String dbPasswd) {
+ try{
+ this.dbuser = dbYalpUser;
+ this.dbpasswd = dbPasswd;
+ Class.forName("org.postgresql.Driver");
+ con = DriverManager.getConnection(db,dbuser,dbpasswd);
+ System.out.println("YalpAuth: PGSQL connection established");
+ this.stat= con.createStatement();
+ } catch (SQLException e) {
+ System.out.println("Exception in DbConnection Constructor: "+e);
+ } catch (ClassNotFoundException e) {
+ System.out.println("Exception in DbConnection Constructor: "+e);
+ }
+ }
+
+/*
+ * checks if user exists in yalpYalpUser Database and what rights he has
+ *
+ * @param username
+ * username to check
+ * @param passwd
+ * password to check
+ *
+ * @return enum privilege level
+ */
+ public int userVerify(String username,String passwd) {
+ try{
+ ResultSet result=stat.executeQuery("select * from \"user\" where \"username\" = '"+username+"' and \"passwd\" = '"+passwd+"';");
+
+ if (result.next()){
+ if (result.getBoolean(5)==true){
+ return 2;
+ }else return 1;
+ }else return 0;
+ }catch (SQLException e){
+ System.out.println("Exception in DbConnection.userVerify: "+e);
+ return 0;
+ }
+ }
+
+/*
+ * returns an ArrayList with all yalpYalpUsers and Admins
+ *
+ * @return ArrayList<YalpUser>
+ * list with all YalpYalpUsers and Admins
+ */
+ public void getUser(UsersHolder list, YalpErrorHolder err) {
+ try {
+ ArrayList<YalpUser> resultList =new ArrayList<YalpUser>();
+ YalpUser actUser = new YalpUser();
+ String query = "select * from \"user\"order by \"id\";";
+ Statement stat= con.createStatement();
+ ResultSet result=stat.executeQuery(query);
+
+ while(result.next())
+ {
+ /* t.b.d. - create YalpUser according to new database design */
+ // result.getInt(1),result.getString(2),result.getString(3),result.getString(4),result.getBoolean(5)))
+ resultList.add( actUser );
+ }
+ YalpUser[] u = new YalpUser[1];
+ list = new UsersHolder(resultList.toArray(u));
+ } catch (SQLException e) {
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.ERROR_SQL;
+ error.descr = e.toString();
+ error.level = YalpErrorLevel.ERROR_LEVEL_ERROR;
+ err = new YalpErrorHolder(error);
+ }
+ }
+
+/*
+ * submits changes to yalpYalpUserDatabase
+ *
+ * @param change
+ * describes the change to commit
+ * @return int
+ * -1 if failed
+ */
+ public void changeUser(YalpUser usr, String passwd, Action todo,
+ YalpError err) {
+
+ /* t.b.d. alter to new db design
+ try{
+ String sql;
+ switch (todo.type){
+ // if updateType is UPDATE
+ case Action._UPDATE:
+ sql="update \"user\" set \"username\"='"+usr.name+"', \"passwd\"='"+change.passwd+"', \"realname\"='"+change.realname+"', \"admin\"="+change.admin+" where \"id\"= "+change.id+" ;";
+ break;
+ // if updateType is INSERT INTO
+ case Action._INSERT:
+ sql="insert into \"user\" values(nextval('userId'), '"+usr+"','"+change.passwd+"','"+change.realname+"',"+change.admin+");";
+ break;
+ // if updateType is DELETE
+ case Action._DELETE:
+ sql="delete from \"user\" where \"id\"= "+change.id+" ;";
+ break;
+ default:
+ //errorhandling
+ }
+ // perform operation on table an return number of updated rows
+ System.out.println(sql);
+ return stat.executeUpdate(sql);
+ }catch(SQLException e){
+ System.out.println("Exception in DbConnection.changeYalpUser: "+e);
+ }
+ */
+ }
+}
diff --git a/src/YalpAuth/YalpPGSqlAuth/YalpPGSqlAuth.java b/src/YalpAuth/YalpPGSqlAuth/YalpPGSqlAuth.java
new file mode 100644
index 0000000..53ddde1
--- /dev/null
+++ b/src/YalpAuth/YalpPGSqlAuth/YalpPGSqlAuth.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+package YalpAuth.YalpPGSqlAuth;
+
+import YalpInterfaces.*;
+
+/*
+ * Class YalpPGSqlAuth
+ *
+ * <em>Implements functionality of the DBConnectionInterface</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 1 02-04-2006<br>
+ */
+
+public class YalpPGSqlAuth {
+ private YalpAuthInterfaceImpl con;
+ private DatabaseDefines config;
+
+ public static void main(String[] args)
+ {
+ System.out.println("YalpPGSqlAuth\n");
+ }
+}
diff --git a/src/YalpClients/ClientConfiguration.java b/src/YalpClients/ClientConfiguration.java
new file mode 100755
index 0000000..7e39e78
--- /dev/null
+++ b/src/YalpClients/ClientConfiguration.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+package YalpClients;
+
+/*
+ * Class ClientSettings
+ *
+ * <em>handles Settings of the yalpClient</em>
+ *
+ * @author Manuel Traut, Volker Dahnke
+ *
+ * @version 0.1 18-03-2006<br>
+ *
+ * @see client
+ */
+
+public class ClientConfiguration{
+ static final long serialVersionUID = 0;
+ public String serverIP = "localhost";
+ public Integer classServerPort = 5002;
+ public Integer registryPort = 5001;
+ public String vlcCommand = "vlc";
+
+/*
+ * sets IP of yalp Server to connect to
+ *
+ * @param serverIP
+ * ip of yalpServer
+ */
+ public void setserverIP(String serverIP){
+ this.serverIP = serverIP;
+ }
+
+/*
+ * sets Port of yalp ClassServer to get Client-classFiles from
+ *
+ * @param classServerPort
+ * port of classServer
+ */
+ public void setclassServerPort(int classServerPort){
+ this.classServerPort = classServerPort;
+ }
+
+/*
+ * sets Port where RMI Registry can be found
+ *
+ * @param registryPort
+ * port of RMI Registry
+ */
+ public void setregistryPort(int registryPort){
+ this.registryPort = registryPort;
+ }
+
+/*
+ * sets Command how vlcPlayer on Client can be started
+ * on some hardware it can be useful, to commit not only:
+ * <path to vlc installation>/<name of vlc executable>
+ * but also path, executable and <params> like --alsadev hw0,0
+ * @param vlcCommand
+ * for a perfectly running vlc on the client
+ */
+ public void setvlcCommand(String vlcCommand){
+ this.vlcCommand = vlcCommand;
+ }
+
+/*
+ * returns the ip of the yalpServer
+ *
+ * @return String
+ * ip of yalpServer
+ */
+ public String getserverIP(){
+ return this.serverIP;
+ }
+
+/*
+ * returns port of the yalpClassServer
+ *
+ * @return int
+ * port of yalpClassServer
+ */
+ public int getclassServerPort(){
+ return this.classServerPort;
+ }
+
+/*
+ * returns port of RMI Registry
+ *
+ * @return int
+ * Port of RMI Registry
+ */
+ public int getregistryPort(){
+ return this.registryPort;
+ }
+
+/*
+ * returns command to start vlc Player on client
+ *
+ * @return String
+ * Command
+ */
+ public String getvlcCommand(){
+ return this.vlcCommand;
+ }
+
+}
diff --git a/src/YalpClients/SwtClient/GUI/GUI.java b/src/YalpClients/SwtClient/GUI/GUI.java
new file mode 100644
index 0000000..4c0e474
--- /dev/null
+++ b/src/YalpClients/SwtClient/GUI/GUI.java
@@ -0,0 +1,2101 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpClients.SwtClient.GUI;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.swt.events.*;
+import java.util.*;
+
+import YalpInterfaces.*;
+import YalpClients.SwtClient.*;
+
+/*
+ *
+ * Class GUI
+ *
+ * <em></em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 1 02-04-2006<br>
+ *
+ */
+public class GUI extends org.eclipse.swt.widgets.Composite {
+
+ public Model model;
+ public Composite resultComposite;
+ public Composite playlistComposite;
+ public Composite bottemComposite;
+ public Table resultTable1;
+ public Table resultTable2;
+ public Composite composite1;
+ public Composite changeComposite;
+ public Table UserTable;
+ public Composite composite3;
+
+ private AccessRights userKind;
+ private StyledText styledText1;
+ private CTabFolder cTabFolder1;
+ private CTabItem tab1;
+ private Composite container1;
+ private Composite topComposite;
+ private Group find;
+ private Group logo;
+ private CTabItem tab2;
+ private Composite container2;
+ private Group group1;
+ private Group group2;
+ private CLabel authorLabel;
+ private CLabel titleLabel;
+ private CLabel streamLabel2;
+ private CLabel actualStreamLabel2;
+ private CLabel actualStreamLabel1;
+ private CLabel streamLabel1;
+ private CLabel data2;
+ private CLabel data1;
+ private Button shutdown;
+ private TableColumn ip;
+ private TableColumn userName;
+ public Table iptable;
+ private Composite composite4;
+
+ private Button submitButton;
+ private CLabel adminAddLabel;
+ private CLabel passwdAddLable;
+ private CLabel usernameAddLable;
+ private CLabel realnameAddLabel;
+ private CCombo adminAdd;
+ private Text realnameAdd;
+ private Text passwdAdd;
+ private Text usernameAdd;
+ private Group tab3group5;
+ private Button next;
+ private Button stop;
+ private Button play;
+ private CLabel cLabel2;
+ private Button save;
+ private Text userTableId;
+ private Text passwd;
+ private Text username;
+ private Text userTableName;
+ private CLabel adminLabel;
+ private CCombo adminCombo;
+ private CLabel nameLable;
+ private CLabel passwdLable;
+ private CLabel usernameLable;
+ private CLabel idLable;
+ private Group tab3group4;
+ private Button delete;
+ private Button add1;
+ private Group tab3Group3;
+ private Group tab3Group2;
+ private Group tab3Group1;
+ private Composite container3;
+ private Button deleteButton;
+ private Button addButton;
+ private StyledText status;
+ private Button saveButton;
+ private Text id;
+ private CLabel idLabel;
+ private CLabel cLabel1;
+ private CLabel nameLabel;
+ private CLabel pathLabel;
+ private CLabel lastEditLable;
+ private CLabel ownerIdLabel;
+ private CLabel resolutionLabel;
+ private CLabel vBitrateLabel;
+ private CLabel aBitrateLabel;
+ private CLabel durationLabel;
+ private CLabel yearLabel;
+ private CLabel categoryLabel;
+ private CLabel albumLabel;
+ private CCombo type;
+ private Text name;
+ private Text path;
+ private Text lastEdit;
+ private Text ownerId;
+ private Text resolution;
+ private Text vBitrate;
+ private Text aBitrate;
+ private Text duration;
+ private Text year;
+ private Text category;
+ private Text album;
+ private Text author;
+ private Text title;
+ private Composite composite2;
+ private Table playlistTable;
+ private Button add2;
+ private Button del;
+ private Boolean isNotPlaying=true;
+ private Boolean paused =true;
+ private CTabItem tab3;
+ private Composite parent;
+ private Display display;
+ final Image pauseImage=new Image(this.getDisplay(),"img/pause.gif");
+ final Image playImage=new Image(this.getDisplay(),"img/play.gif");
+ final Image forwardImage=new Image(this.getDisplay(),"img/forward.gif");
+ {
+ //Register as a resource user - SWTResourceManager will
+ //handle the obtaining and disposing of resources
+ SWTResourceManager.registerResourceUser(this);
+ }
+
+ public GUI( Composite parent, Display display, Model model,
+ AccessRights userKind, int style ) {
+
+ super(parent, style);
+
+ this.parent = parent;
+ this.display = display;
+ this.model = model;
+ this.userKind = userKind;
+
+ initGUI();
+ }
+
+ private void initGUI() {
+ try {
+ this.setSize(800, 600);
+ this.setBackground(SWTResourceManager.getColor(192, 192, 192));
+ GridLayout thisLayout = new GridLayout(1, true);
+ thisLayout.marginWidth = 5;
+ thisLayout.marginHeight = 5;
+ thisLayout.numColumns = 1;
+ thisLayout.makeColumnsEqualWidth = true;
+ thisLayout.horizontalSpacing = 5;
+ thisLayout.verticalSpacing = 5;
+ this.setLayout(thisLayout);
+
+ {
+ if (this.userKind.value() == AccessRights._USER){
+ cTabFolder1 = new CTabFolder(this, SWT.NONE);
+ GridData cTabFolder1LData = new GridData();
+ cTabFolder1LData.widthHint = 787;
+ cTabFolder1LData.heightHint = 568;
+ cTabFolder1.setLayoutData(cTabFolder1LData);
+ {
+ tab1 = new CTabItem(cTabFolder1,SWT.NONE);
+ tab1.setText("Find");
+ {
+ container1 = new Composite(cTabFolder1,SWT.NONE);
+ tab1.setControl(container1);
+ RowLayout container1Layout = new RowLayout(org.eclipse.swt.SWT.HORIZONTAL);
+ container1.setLayout(container1Layout);
+ {
+ topComposite = new Composite(container1,SWT.NONE);
+ GridLayout topCompositeLayout = new GridLayout();
+ topCompositeLayout.makeColumnsEqualWidth = true;
+ topCompositeLayout.numColumns = 2;
+ topCompositeLayout.verticalSpacing = 2;
+ topCompositeLayout.horizontalSpacing = 5;
+ topComposite.setLayout(topCompositeLayout);
+ RowData topCompositeLData = new RowData();
+ topCompositeLData.width = 783;
+ topCompositeLData.height = 566;
+ topComposite.setLayoutData(topCompositeLData);
+ {
+ find = new Group(topComposite,SWT.NONE);
+ this.find(find,resultComposite,playlistComposite,bottemComposite,1);
+ }
+ {
+ logo = new Group(topComposite,SWT.NONE);
+ this.logo(logo);
+ }
+ {
+ resultComposite = new Composite(topComposite,SWT.NONE);
+ resultTable1 = new Table(resultComposite,SWT.MULTI|SWT.FULL_SELECTION);
+ resultTable1.setToolTipText("Medias");
+ resultTable1.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ add2.setEnabled(true);
+ }
+ });
+ this.resultTable(resultComposite,resultTable1,1);
+ }
+ {
+ playlistComposite = new Composite(topComposite,SWT.NONE);
+ FormLayout playlistCompositeLayout = new FormLayout();
+ playlistComposite.setLayout(playlistCompositeLayout);
+ GridData playlistCompositeLData = new GridData();
+ playlistCompositeLData.heightHint = 390;
+ playlistCompositeLData.horizontalAlignment = GridData.FILL;
+ playlistComposite.setLayoutData(playlistCompositeLData);
+ playlistComposite.setVisible(false);
+ playlistComposite.setSize(238, 390);
+ {
+ next = new Button(playlistComposite,SWT.PUSH | SWT.CENTER);
+ FormData nextLData = new FormData();
+ nextLData.width = 45;
+ nextLData.height = 21;
+ nextLData.left = new FormAttachment(0, 1000, 185);
+ nextLData.top = new FormAttachment(0, 1000, 365);
+ next.setLayoutData(nextLData);
+ next.setEnabled(false);
+ next.setFont(SWTResourceManager.getFont("Times", 8, 1, false, false));
+ next.setToolTipText("play next Title");
+ next.setImage(forwardImage);
+ next.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ model.next();
+ }
+ });
+ }
+ {
+ stop = new Button(playlistComposite,SWT.PUSH | SWT.CENTER);
+ FormData stopLData = new FormData();
+ stopLData.width = 35;
+ stopLData.height = 21;
+ stopLData.left = new FormAttachment(0, 1000, 91);
+ stopLData.top = new FormAttachment(0, 1000, 365);
+ stop.setLayoutData(stopLData);
+ stop.setImage(new Image(this.getDisplay(),"img/stop.gif"));
+ stop.setEnabled(false);
+ stop.setToolTipText("stop");
+ stop.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ if (model.stop()){
+ play.setEnabled(true);
+ next.setEnabled(false);
+ stop.setEnabled(false);
+ play.setImage(playImage);
+ play.setToolTipText("play");
+ isNotPlaying=true;
+ }
+
+ }
+ });
+ }
+ {
+ play = new Button(playlistComposite,SWT.PUSH | SWT.CENTER);
+ FormData playLData = new FormData();
+ playLData.width = 35;
+ playLData.height = 21;
+ playLData.left = new FormAttachment(0, 1000, 50);
+ playLData.top = new FormAttachment(0, 1000, 365);
+ play.setLayoutData(playLData);
+ play.setImage(playImage);
+ play.setEnabled(false);
+ play.setToolTipText("play");
+ play.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ stop.setEnabled(true);
+ if (playlistTable.getItemCount()>1)next.setEnabled(true);
+ del.setEnabled(false);
+ //add2.setEnabled(false);
+ if (isNotPlaying){
+ play.setCursor(SWTResourceManager.getCursor(SWT.CURSOR_WAIT));
+ if(model.play()){
+ play.setImage(pauseImage);
+ play.setToolTipText("pause");
+ play.setCursor(SWTResourceManager.getCursor(SWT.NONE));
+ isNotPlaying= false;
+ }else;
+ }else{
+ if(model.pause()){
+ if (paused){
+ play.setImage(playImage);
+ play.setToolTipText("play");
+ paused=false;
+ }else{
+ play.setImage(pauseImage);
+ play.setToolTipText("pause");
+ paused=true;
+ }
+ }else;
+ }
+
+ }
+ });
+ }
+ {
+ add2 = new Button(playlistComposite,SWT.PUSH | SWT.CENTER);
+ FormData addLData = new FormData();
+ addLData.width = 25;
+ addLData.height = 21;
+ addLData.left = new FormAttachment(0, 1000, 2);
+ addLData.top = new FormAttachment(0, 1000, 160);
+ add2.setLayoutData(addLData);
+ add2.setText(">>");
+ add2.setEnabled(false);
+ add2.setToolTipText("add to Playlist");
+ add2.setFont(SWTResourceManager.getFont("Times", 8, 1, false, false));
+ add2.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ if (System.getProperty("os.name")== "Mac OS X"){
+ for (int i=resultTable1.getSelectionCount()-1;i>=0;i--){
+ int id=new Integer(resultTable1.getSelection()[i].getText(0)).intValue();
+ System.out.println(resultTable1.getSelection()[i].getText(1));
+ model.add2PlayList(id);
+ }
+ }else{
+ for (int i=0;i<resultTable1.getSelectionCount();i++){
+ int id=new Integer(resultTable1.getSelection()[i].getText(0)).intValue();
+ System.out.println(resultTable1.getSelection()[i].getText(1));
+ model.add2PlayList(id);
+ }
+ }
+ while(playlistTable.getItemCount()!=0){
+ playlistTable.remove(0);
+ }
+ ArrayList<Media> playlist=model.getToPlaylist();
+ for(int i=0;i<playlist.size();i++){
+ Media result=playlist.get(i);
+ TableItem item = new TableItem(playlistTable,SWT.NONE);
+ item.setText(0,result.name);
+ item.setText(1,result.duration);
+ }
+ play.setEnabled(true);
+ if (playlistTable.getItemCount()>1&& !isNotPlaying)next.setEnabled(true);
+ }
+ });
+ }
+ {
+ del = new Button(playlistComposite,SWT.PUSH | SWT.CENTER);
+ FormData delLData = new FormData();
+ delLData.width = 25;
+ delLData.height = 21;
+ delLData.left = new FormAttachment(0, 1000, 2);
+ delLData.top = new FormAttachment(0, 1000, 200);
+ del.setLayoutData(delLData);
+ del.setEnabled(false);
+ del.setToolTipText("del from Playlist");
+ del.setText("<<");
+ del.setFont(SWTResourceManager.getFont("Times", 8, 1, false, false));
+ del.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ for (int i=playlistTable.getSelectionCount()-1;i>=0;i--){
+ int pos = playlistTable.getSelectionIndices()[i];
+ model.removeFromPlayList(pos);
+ }
+
+ del.setEnabled(false);
+ while(playlistTable.getItemCount()!=0){
+ playlistTable.remove(0);
+ }
+ ArrayList<Media> playlist=model.getToPlaylist();
+ for(int i=0;i<playlist.size();i++){
+ Media result=playlist.get(i);
+ TableItem item = new TableItem(playlistTable,SWT.NONE);
+ item.setText(0,result.name);
+ item.setText(1,result.duration);
+ }
+ if (playlistTable.getItemCount()==0)play.setEnabled(false);
+ }
+ });
+ }
+ {
+ playlistTable = new Table(playlistComposite,SWT.MULTI|SWT.FULL_SELECTION);
+ playlistTable.setHeaderVisible(true);
+ FormData playlistTableLData = new FormData();
+ playlistTableLData.width = 184;
+ playlistTableLData.height = 330;
+ playlistTableLData.top = new FormAttachment(24, 1000, 0);
+ playlistTableLData.left = new FormAttachment(0, 1000, 38);
+ playlistTable.setLayoutData(playlistTableLData);
+ playlistTable.setToolTipText("Playlist");
+ playlistTable.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ if (isNotPlaying)del.setEnabled(true);
+ }
+ });
+ TableColumn title = new TableColumn(playlistTable,SWT.LEFT);
+ title.setText("Title");
+ title.setWidth(120);
+ title.setMoveable(true);
+ TableColumn duration = new TableColumn(playlistTable,SWT.RIGHT);
+ duration.setText("Duration");
+ duration.setWidth(80);
+ duration.setMoveable(true);
+ }
+ }
+ }
+ /*{
+ bottemComposite = new Composite(container1,SWT.NONE);
+ bottemComposite.setVisible(false);
+ GridLayout bottemCompositeLayout = new GridLayout();
+ bottemCompositeLayout.makeColumnsEqualWidth = true;
+ bottemCompositeLayout.verticalSpacing = 2;
+ bottemCompositeLayout.horizontalSpacing = 5;
+ bottemComposite.setLayout(bottemCompositeLayout);
+ RowData bottemCompositeLData = new RowData();
+ bottemCompositeLData.width = 777;
+ bottemCompositeLData.height = 68;
+ bottemComposite.setLayoutData(bottemCompositeLData);
+ {
+ styledText1 = new StyledText(bottemComposite,SWT.NONE);
+ GridData styledText1LData = new GridData();
+ styledText1LData.widthHint = 765;
+ styledText1LData.heightHint = 55;
+ styledText1.setLayoutData(styledText1LData);
+ styledText1.setText("styledText1");
+ styledText1.setSize(765, 55);
+ }
+ }*/
+ }
+ }
+ {
+ tab2 = new CTabItem(cTabFolder1,SWT.NONE);
+ tab2.setText("Change");
+ {
+ container2 = new Composite(cTabFolder1,SWT.NONE);
+ GridLayout container2Layout = new GridLayout();
+ container2Layout.makeColumnsEqualWidth = true;
+ container2.setLayout(container2Layout);
+ tab2.setControl(container2);
+ container2.setVisible(false);
+ {
+ composite2 = new Composite(container2,SWT.NONE);
+ GridLayout composite2Layout = new GridLayout();
+ composite2Layout.makeColumnsEqualWidth = true;
+ composite2Layout.numColumns=2;
+ composite2.setLayout(composite2Layout);
+ GridData composite2LData = new GridData();
+ composite2LData.widthHint = 780;
+ composite2LData.heightHint = 497;
+ composite2.setLayoutData(composite2LData);
+ {
+ group1 = new Group(composite2,SWT.NONE);
+ this.find(group1,group2,composite1,changeComposite,2);
+ }
+ {
+ group2 = new Group(composite2,SWT.NONE);
+ this.logo(group2);
+ }
+ {
+ composite1 = new Composite(composite2,SWT.NONE);
+ {
+ resultTable2 = new Table(composite1,SWT.MULTI|SWT.FULL_SELECTION);
+ resultTable2.setToolTipText("Medias");
+ resultTable2.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ if(resultTable2.getSelectionCount()<2){
+ int identity =new Integer(resultTable2.getSelection()[0].getText()).intValue();
+ Media result = model.getMediaWithId(identity,2);
+ if (result!=null){
+ id.setText(new Integer(result.id).toString());
+ title.setText(result.name);
+ /* t.b.d. parse from string props
+ author.setText(result.author);
+ album.setText(result.album);
+ category.setText(result.category);
+ year.setText(result.year);
+ */
+ duration.setText(result.duration);
+ /*
+ aBitrate.setText(new Integer(result.aBitrate).toString());
+ vBitrate.setText(new Integer(result.vBitrate).toString());
+ resolution.setText(result.resolution);
+ */
+ ownerId.setText(result.owner.name);
+ lastEdit.setText(result.lastEdit);
+ path.setText(result.path);
+ name.setText(result.name);
+ String _type = model.getTypeName(result.type);
+ type.setText(_type);
+ changeComposite.setVisible(true);
+ deleteButton.setVisible(true);
+ }
+ }else changeComposite.setVisible(false);
+ }
+ });
+ this.resultTable(composite1,resultTable2,2);
+ }
+ }
+ {
+ changeComposite = new Composite(composite2,SWT.NONE);
+ FormLayout changeCompositeLayout = new FormLayout();
+ changeComposite.setLayout(changeCompositeLayout);
+ GridData changeCompositeLData = new GridData();
+ changeCompositeLData.widthHint = 238;
+ changeCompositeLData.heightHint = 357;
+ changeCompositeLData.verticalAlignment = GridData.BEGINNING;
+ changeComposite.setLayoutData(changeCompositeLData);
+ changeComposite.setVisible(false);
+ {
+ saveButton = new Button(changeComposite,SWT.PUSH | SWT.CENTER);
+ saveButton.setText("Save");
+ FormData saveButtonLData = new FormData();
+ saveButtonLData.width = 40;
+ saveButtonLData.height = 21;
+ saveButtonLData.left = new FormAttachment(0, 1000, 30);
+ saveButtonLData.top = new FormAttachment(0, 1000, 315);
+ saveButton.setLayoutData(saveButtonLData);
+ saveButton.setToolTipText("save Changes");
+ saveButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ saveButtonWidgetSelected(evt);
+ }
+ });
+ }
+ {
+ id = new Text(changeComposite,SWT.NONE);
+ FormData idLData = new FormData();
+ idLData.width = 124;
+ idLData.height = 14;
+ idLData.left = new FormAttachment(0, 1000, 100);
+ idLData.top = new FormAttachment(0, 1000, 10);
+ id.setLayoutData(idLData);
+ id.setEditable(false);
+ }
+ {
+ idLabel = new CLabel(changeComposite,SWT.NONE);
+ idLabel.setText("Id:");
+ FormData idLabelLData = new FormData();
+ idLabelLData.width = 60;
+ idLabelLData.height = 21;
+ idLabelLData.left = new FormAttachment(0, 1000, 20);
+ idLabelLData.top = new FormAttachment(0, 1000, 5);
+ idLabel.setLayoutData(idLabelLData);
+ }
+ {
+ cLabel1 = new CLabel(changeComposite,SWT.NONE);
+ cLabel1.setText("Type:");
+ FormData cLabel1LData = new FormData();
+ cLabel1LData.width = 60;
+ cLabel1LData.height = 21;
+ cLabel1LData.left = new FormAttachment(0, 1000, 20);
+ cLabel1LData.top = new FormAttachment(0, 1000, 285);
+ cLabel1.setLayoutData(cLabel1LData);
+ }
+ {
+ nameLabel = new CLabel(changeComposite,SWT.NONE);
+ nameLabel.setText("Name:");
+ FormData nameLabelLData = new FormData();
+ nameLabelLData.width = 60;
+ nameLabelLData.height = 21;
+ nameLabelLData.left = new FormAttachment(0, 1000, 20);
+ nameLabelLData.top = new FormAttachment(0, 1000, 265);
+ nameLabel.setLayoutData(nameLabelLData);
+ }
+ {
+ pathLabel = new CLabel(changeComposite,SWT.NONE);
+ pathLabel.setText("Path:");
+ FormData pathLabelLData = new FormData();
+ pathLabelLData.width = 60;
+ pathLabelLData.height = 21;
+ pathLabelLData.left = new FormAttachment(0, 1000, 20);
+ pathLabelLData.top = new FormAttachment(0, 1000, 245);
+ pathLabel.setLayoutData(pathLabelLData);
+ }
+ {
+ lastEditLable = new CLabel(changeComposite,SWT.NONE);
+ lastEditLable.setText("Last Edit:");
+ FormData lastEditLableLData = new FormData();
+ lastEditLableLData.width = 60;
+ lastEditLableLData.height = 21;
+ lastEditLableLData.left = new FormAttachment(0, 1000, 20);
+ lastEditLableLData.top = new FormAttachment(0, 1000, 225);
+ lastEditLable.setLayoutData(lastEditLableLData);
+ }
+ {
+ ownerIdLabel = new CLabel(changeComposite,SWT.NONE);
+ ownerIdLabel.setText("Owner:");
+ FormData ownerIdLabelLData = new FormData();
+ ownerIdLabelLData.width = 60;
+ ownerIdLabelLData.height = 21;
+ ownerIdLabelLData.left = new FormAttachment(0, 1000, 20);
+ ownerIdLabelLData.top = new FormAttachment(0, 1000, 205);
+ ownerIdLabel.setLayoutData(ownerIdLabelLData);
+ }
+ {
+ resolutionLabel = new CLabel(changeComposite,SWT.NONE);
+ resolutionLabel.setText("Resolution:");
+ FormData resolutionLabelLData = new FormData();
+ resolutionLabelLData.width = 60;
+ resolutionLabelLData.height = 21;
+ resolutionLabelLData.left = new FormAttachment(0, 1000, 20);
+ resolutionLabelLData.top = new FormAttachment(0, 1000, 185);
+ resolutionLabel.setLayoutData(resolutionLabelLData);
+ }
+ {
+ vBitrateLabel = new CLabel(changeComposite,SWT.NONE);
+ vBitrateLabel.setText("V-Bitrate:");
+ FormData vBitrateLabelLData = new FormData();
+ vBitrateLabelLData.width = 60;
+ vBitrateLabelLData.height = 21;
+ vBitrateLabelLData.left = new FormAttachment(0, 1000, 20);
+ vBitrateLabelLData.top = new FormAttachment(0, 1000, 165);
+ vBitrateLabel.setLayoutData(vBitrateLabelLData);
+ }
+ {
+ aBitrateLabel = new CLabel(changeComposite,SWT.NONE);
+ aBitrateLabel.setText("A-Bitrate:");
+ FormData aBitrateLabelLData = new FormData();
+ aBitrateLabelLData.width = 60;
+ aBitrateLabelLData.height = 21;
+ aBitrateLabelLData.left = new FormAttachment(0, 1000, 20);
+ aBitrateLabelLData.top = new FormAttachment(0, 1000, 145);
+ aBitrateLabel.setLayoutData(aBitrateLabelLData);
+ }
+ {
+ durationLabel = new CLabel(changeComposite,SWT.NONE);
+ durationLabel.setText("Duration:");
+ FormData durationLabelLData = new FormData();
+ durationLabelLData.width = 60;
+ durationLabelLData.height = 21;
+ durationLabelLData.left = new FormAttachment(0, 1000, 20);
+ durationLabelLData.top = new FormAttachment(0, 1000, 125);
+ durationLabel.setLayoutData(durationLabelLData);
+ }
+ {
+ yearLabel = new CLabel(changeComposite,SWT.NONE);
+ yearLabel.setText("Year:");
+ FormData yearLabelLData = new FormData();
+ yearLabelLData.width = 60;
+ yearLabelLData.height = 21;
+ yearLabelLData.left = new FormAttachment(0, 1000, 20);
+ yearLabelLData.top = new FormAttachment(0, 1000, 105);
+ yearLabel.setLayoutData(yearLabelLData);
+ }
+ {
+ categoryLabel = new CLabel(changeComposite,SWT.NONE);
+ categoryLabel.setText("Category:");
+ FormData categoryLabelLData = new FormData();
+ categoryLabelLData.width = 60;
+ categoryLabelLData.height = 21;
+ categoryLabelLData.left = new FormAttachment(0, 1000, 20);
+ categoryLabelLData.top = new FormAttachment(0, 1000, 85);
+ categoryLabel.setLayoutData(categoryLabelLData);
+ }
+ {
+ albumLabel = new CLabel(changeComposite,SWT.NONE);
+ albumLabel.setText("Album");
+ FormData albumLabelLData = new FormData();
+ albumLabelLData.width = 60;
+ albumLabelLData.height = 21;
+ albumLabelLData.left = new FormAttachment(0, 1000, 20);
+ albumLabelLData.top = new FormAttachment(0, 1000, 65);
+ albumLabel.setLayoutData(albumLabelLData);
+ }
+ {
+ authorLabel = new CLabel(changeComposite,SWT.NONE);
+ authorLabel.setText("Author:");
+ FormData authorLabelLData = new FormData();
+ authorLabelLData.width = 60;
+ authorLabelLData.height = 21;
+ authorLabelLData.left = new FormAttachment(0, 1000, 20);
+ authorLabelLData.top = new FormAttachment(0, 1000, 45);
+ authorLabel.setLayoutData(authorLabelLData);
+ }
+ {
+ titleLabel = new CLabel(changeComposite,SWT.NONE);
+ titleLabel.setText("Title:");
+ FormData cLabel1LData1 = new FormData();
+ cLabel1LData1.width = 60;
+ cLabel1LData1.height = 21;
+ cLabel1LData1.left = new FormAttachment(0, 1000, 20);
+ cLabel1LData1.top = new FormAttachment(0, 1000, 25);
+ titleLabel.setLayoutData(cLabel1LData1);
+ }
+ {
+ type = new CCombo(changeComposite,SWT.NONE);
+ FormData typeLData = new FormData();
+ typeLData.width = 111;
+ typeLData.height = 16;
+ typeLData.left = new FormAttachment(0, 1000, 100);
+ typeLData.top = new FormAttachment(0, 1000, 290);
+ type.setLayoutData(typeLData);
+ type.setCursor(SWTResourceManager.getCursor(SWT.CURSOR_HAND));
+ {
+ type.add("audio");
+ type.add("video");
+ }
+ }
+ {
+ name = new Text(changeComposite,SWT.NONE);
+ FormData nameLData = new FormData();
+ nameLData.width = 124;
+ nameLData.height = 14;
+ nameLData.left = new FormAttachment(0, 1000, 100);
+ nameLData.top = new FormAttachment(0, 1000, 270);
+ name.setLayoutData(nameLData);
+ name.setEditable(false);
+ }
+ {
+ path = new Text(changeComposite,SWT.NONE);
+ FormData pathLData = new FormData();
+ pathLData.width = 124;
+ pathLData.height = 14;
+ pathLData.left = new FormAttachment(0, 1000, 100);
+ pathLData.top = new FormAttachment(0, 1000, 250);
+ path.setLayoutData(pathLData);
+ path.setEditable(false);
+ }
+ {
+ lastEdit = new Text(changeComposite,SWT.NONE);
+ FormData lastEditLData = new FormData();
+ lastEditLData.width = 124;
+ lastEditLData.height = 14;
+ lastEditLData.left = new FormAttachment(0, 1000, 100);
+ lastEditLData.top = new FormAttachment(0, 1000, 230);
+ lastEdit.setLayoutData(lastEditLData);
+ lastEdit.setEditable(false);
+ }
+ {
+ ownerId = new Text(changeComposite,SWT.NONE);
+ FormData ownerIdLData = new FormData();
+ ownerIdLData.width = 124;
+ ownerIdLData.height = 14;
+ ownerIdLData.left = new FormAttachment(0, 1000, 100);
+ ownerIdLData.top = new FormAttachment(0, 1000, 210);
+ ownerId.setLayoutData(ownerIdLData);
+ ownerId.setEditable(false);
+ }
+ {
+ resolution = new Text(changeComposite,SWT.NONE);
+ FormData resolutionLData = new FormData();
+ resolutionLData.width = 124;
+ resolutionLData.height = 14;
+ resolutionLData.left = new FormAttachment(0, 1000, 100);
+ resolutionLData.top = new FormAttachment(0, 1000, 190);
+ resolution.setLayoutData(resolutionLData);
+ }
+ {
+ vBitrate = new Text(changeComposite,SWT.NONE);
+ FormData vBitrateLData = new FormData();
+ vBitrateLData.width = 124;
+ vBitrateLData.height = 14;
+ vBitrateLData.left = new FormAttachment(0, 1000, 100);
+ vBitrateLData.top = new FormAttachment(0, 1000, 170);
+ vBitrate.setLayoutData(vBitrateLData);
+ }
+ {
+ aBitrate = new Text(changeComposite,SWT.NONE);
+ FormData aBitrateLData = new FormData();
+ aBitrateLData.width = 124;
+ aBitrateLData.height = 14;
+ aBitrateLData.left = new FormAttachment(0, 1000, 100);
+ aBitrateLData.top = new FormAttachment(0, 1000, 150);
+ aBitrate.setLayoutData(aBitrateLData);
+ }
+ {
+ duration = new Text(changeComposite,SWT.NONE);
+ FormData durationLData = new FormData();
+ durationLData.width = 124;
+ durationLData.height = 14;
+ durationLData.left = new FormAttachment(0, 1000, 100);
+ durationLData.top = new FormAttachment(0, 1000, 130);
+ duration.setLayoutData(durationLData);
+ }
+ {
+ year = new Text(changeComposite,SWT.NONE);
+ FormData yearLData = new FormData();
+ yearLData.width = 124;
+ yearLData.height = 14;
+ yearLData.left = new FormAttachment(0, 1000, 100);
+ yearLData.top = new FormAttachment(0, 1000, 110);
+ year.setLayoutData(yearLData);
+ }
+ {
+ category = new Text(changeComposite,SWT.NONE);
+ FormData categoryLData = new FormData();
+ categoryLData.width = 124;
+ categoryLData.height = 14;
+ categoryLData.left = new FormAttachment(0, 1000, 100);
+ categoryLData.top = new FormAttachment(0, 1000, 90);
+ category.setLayoutData(categoryLData);
+ category.setCursor(SWTResourceManager.getCursor(SWT.CURSOR_WAIT));
+ }
+ {
+ album = new Text(changeComposite,SWT.NONE);
+ FormData albumLData = new FormData();
+ albumLData.width = 124;
+ albumLData.height = 14;
+ albumLData.left = new FormAttachment(0, 1000, 100);
+ albumLData.top = new FormAttachment(0, 1000, 70);
+ album.setLayoutData(albumLData);
+ }
+ {
+ author = new Text(changeComposite,SWT.NONE);
+ FormData authorLData = new FormData();
+ authorLData.width = 124;
+ authorLData.height = 14;
+ authorLData.left = new FormAttachment(0, 1000, 100);
+ authorLData.top = new FormAttachment(0, 1000, 50);
+ author.setLayoutData(authorLData);
+ }
+ {
+ title = new Text(changeComposite,SWT.NONE);
+ FormData titleLData = new FormData();
+ titleLData.width = 124;
+ titleLData.height = 13;
+ titleLData.top = new FormAttachment(0, 1000, 30);
+ titleLData.left = new FormAttachment(0, 1000, 100);
+ title.setLayoutData(titleLData);
+ }
+ }
+ }
+ {
+ composite3 = new Composite(container2,SWT.NONE);
+ FormLayout composite3Layout = new FormLayout();
+ composite3.setLayout(composite3Layout);
+ GridData composite3LData = new GridData();
+ composite3LData.widthHint = 777;
+ composite3LData.heightHint = 58;
+ composite3.setLayoutData(composite3LData);
+ {
+ deleteButton = new Button(composite3,SWT.PUSH | SWT.CENTER);
+ deleteButton.setText("Delete");
+ deleteButton.setVisible(false);
+ FormData deleteButtonLData = new FormData();
+ deleteButtonLData.width = 150;
+ deleteButtonLData.height = 30;
+ deleteButtonLData.left = new FormAttachment(0, 1000, 470);
+ deleteButtonLData.top = new FormAttachment(0, 1000, 15);
+ deleteButton.setLayoutData(deleteButtonLData);
+ deleteButton.setToolTipText("delete File from Database");
+ deleteButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ deleteButtonWidgetSelected(evt);
+ }
+ });
+ }
+ {
+ addButton = new Button(composite3,SWT.PUSH | SWT.CENTER);
+ addButton.setText("Add");
+ FormData addButtonLData = new FormData();
+ addButtonLData.width = 150;
+ addButtonLData.height = 30;
+ addButtonLData.left = new FormAttachment(0, 1000, 160);
+ addButtonLData.top = new FormAttachment(0, 1000, 15);
+ addButton.setLayoutData(addButtonLData);
+ addButton.setToolTipText("add new Files to Database");
+ addButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ addButtonWidgetSelected(evt);
+ }
+ });
+ }
+ }
+ }
+ }
+ {
+ tab3 = new CTabItem(cTabFolder1,SWT.NONE);
+ tab3.setText("Server");
+ {
+ container3 = new Composite(cTabFolder1,SWT.NONE);
+ GridLayout container3Layout = new GridLayout();
+ container3Layout.makeColumnsEqualWidth = true;
+ container3Layout.numColumns=2;
+ container3Layout.verticalSpacing = 0;
+ container3Layout.horizontalSpacing = 5;
+ container3.setLayout(container3Layout);
+ tab3.setControl(container3);
+ {
+ tab3Group1 = new Group(container3,SWT.NONE);
+ FormLayout tab3Group1Layout = new FormLayout();
+ tab3Group1.setLayout(tab3Group1Layout);
+ GridData tab3Group1LData = new GridData();
+ tab3Group1LData.widthHint = 500;
+ tab3Group1LData.heightHint = 129;
+ tab3Group1LData.horizontalAlignment = GridData.CENTER;
+ tab3Group1.setLayoutData(tab3Group1LData);
+ {
+ composite4 = new Composite(tab3Group1, SWT.NONE);
+ FormLayout composite4Layout = new FormLayout();
+ composite4.setLayout(composite4Layout);
+ FormData composite4LData = new FormData();
+ composite4LData.width = 504;
+ composite4LData.height = 140;
+ composite4LData.left = new FormAttachment(0, 1000, -3);
+ composite4LData.top = new FormAttachment(0, 1000, -6);
+ composite4.setLayoutData(composite4LData);
+ {
+ actualStreamLabel2 = new CLabel(
+ composite4,
+ SWT.NONE);
+ FormData actualStreamLabel2LData = new FormData();
+ actualStreamLabel2LData.width = 98;
+ actualStreamLabel2LData.height = 21;
+ actualStreamLabel2LData.left = new FormAttachment(0, 1000, 180);
+ actualStreamLabel2LData.top = new FormAttachment(0, 1000, 65);
+ actualStreamLabel2.setLayoutData(actualStreamLabel2LData);
+ actualStreamLabel2.setFont(SWTResourceManager.getFont("Times", 8, 1, false, false));
+ }
+ {
+ actualStreamLabel1 = new CLabel(
+ composite4,
+ SWT.NONE);
+ actualStreamLabel1.setText("Actual Number of Streams:");
+ FormData actualStreamLabel1LData = new FormData();
+ actualStreamLabel1LData.width = 160;
+ actualStreamLabel1LData.height = 21;
+ actualStreamLabel1LData.left = new FormAttachment(0, 1000, 14);
+ actualStreamLabel1LData.top = new FormAttachment(0, 1000, 65);
+ actualStreamLabel1.setLayoutData(actualStreamLabel1LData);
+ actualStreamLabel1.setFont(SWTResourceManager.getFont("Times", 8, 1, false, false));
+ }
+ {
+ streamLabel2 = new CLabel(
+ composite4,
+ SWT.None);
+ FormData streamLabel2LData = new FormData();
+ streamLabel2LData.width = 98;
+ streamLabel2LData.height = 21;
+ streamLabel2LData.left = new FormAttachment(0, 1000, 180);
+ streamLabel2LData.top = new FormAttachment(0, 1000, 40);
+ streamLabel2.setLayoutData(streamLabel2LData);
+ streamLabel2.setFont(SWTResourceManager.getFont("Times", 8, 1, false, false));
+ }
+ {
+ streamLabel1 = new CLabel(
+ composite4,
+ SWT.NONE);
+ streamLabel1.setText("Total Number of Streams:");
+ FormData streamLabel1LData = new FormData();
+ streamLabel1LData.width = 150;
+ streamLabel1LData.height = 21;
+ streamLabel1LData.left = new FormAttachment(0, 1000, 14);
+ streamLabel1LData.top = new FormAttachment(0, 1000, 40);
+ streamLabel1.setLayoutData(streamLabel1LData);
+ streamLabel1.setFont(SWTResourceManager.getFont("Times", 8, 1, false, false));
+ }
+ {
+ data2 = new CLabel(composite4, SWT.NONE);
+ FormData data2LData = new FormData();
+ data2LData.width = 98;
+ data2LData.height = 21;
+ data2LData.left = new FormAttachment(0, 1000, 180);
+ data2LData.top = new FormAttachment(0, 1000, 15);
+ data2.setLayoutData(data2LData);
+ data2.setFont(SWTResourceManager.getFont("Times", 8, 1, false, false));
+ }
+ {
+ data1 = new CLabel(composite4, SWT.NONE);
+ data1.setText("Total Data in Database:");
+ FormData data1LData = new FormData();
+ data1LData.width = 150;
+ data1LData.height = 21;
+ data1LData.left = new FormAttachment(0, 1000, 14);
+ data1LData.top = new FormAttachment(0, 1000, 15);
+ data1.setLayoutData(data1LData);
+ data1.setFont(SWTResourceManager.getFont("Times", 8, 1, false, false));
+ }
+ {
+ shutdown = new Button(composite4, SWT.PUSH
+ | SWT.CENTER);
+ shutdown.setText("Shutdown");
+ FormData shutdownLData = new FormData();
+ shutdownLData.width = 77;
+ shutdownLData.height = 21;
+ shutdownLData.left = new FormAttachment(0, 1000, 35);
+ shutdownLData.top = new FormAttachment(0, 1000, 105);
+ shutdown.setLayoutData(shutdownLData);
+ shutdown.setToolTipText("Server shutdown");
+ shutdown.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ model.serverShutdown();
+ }
+ });
+ }
+ {
+ iptable = new Table(composite4, SWT.SINGLE);
+ FormData iptableLData = new FormData();
+ iptableLData.width = 173;
+ iptableLData.height = 110;
+ iptableLData.left = new FormAttachment(0, 1000, 308);
+ iptableLData.top = new FormAttachment(0, 1000, 7);
+ iptable.setLayoutData(iptableLData);
+ iptable.setHeaderVisible(true);
+ iptable.setToolTipText("User online");
+ {
+ userName = new TableColumn(
+ iptable,
+ SWT.CENTER);
+ userName.setText("Username");
+ userName.setWidth(70);
+ }
+ {
+ ip = new TableColumn(iptable, SWT.BEGINNING);
+ ip.setText("Ip");
+ ip.setWidth(119);
+ }
+ final int time = 1000;
+ final Runnable timer = new Runnable() {
+ public void run() {
+ refillIpTable();
+ data2.setText("not supported in yalp2");
+ streamLabel2.setText( /*new Integer(model.getAllStreamNum()).toString() */ "not supported in yalp2");
+ display.timerExec(time, this);
+ actualStreamLabel2.setText( /*new Integer(model.getActualStreamNum()).toString()*/ "not supported in yalp2");
+ }
+ };
+ display.timerExec(time, timer);
+ }
+ }
+ }
+ {
+ tab3Group2 = new Group(container3,SWT.NONE);
+ this.logo(tab3Group2);
+ }
+ {
+ tab3Group3 = new Group(container3,SWT.NONE);
+ FormLayout tab3Group3Layout = new FormLayout();
+ tab3Group3.setLayout(tab3Group3Layout);
+ GridData tab3Group3LData = new GridData();
+ tab3Group3LData.widthHint = 500;
+ tab3Group3LData.heightHint = 284;
+ tab3Group3LData.horizontalAlignment = GridData.CENTER;
+ tab3Group3.setLayoutData(tab3Group3LData);
+ tab3Group3.setText("User Management");
+ {
+ delete = new Button(tab3Group3,SWT.PUSH | SWT.CENTER);
+ delete.setText("Delete");
+ FormData deleteLData = new FormData();
+ deleteLData.width = 45;
+ deleteLData.height = 21;
+ deleteLData.left = new FormAttachment(0, 1000, 447);
+ deleteLData.top = new FormAttachment(0, 1000, 254);
+ delete.setLayoutData(deleteLData);
+ delete.setToolTipText("delete User");
+ delete.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ YalpUser toChange = new YalpUser();
+ toChange.id = new Integer(userTableId.getText()).intValue();
+ toChange.name = username.getText();
+ model.changeUser(toChange, passwd.getText(), Action.DELETE);
+ while(UserTable.getItemCount()!=0){
+ UserTable.remove(0);
+ }
+ ArrayList<YalpUser> resultList = model.getUser();
+ for (int i = 0; i < resultList.size(); i++) {
+ TableItem item;
+ YalpUser result = resultList.get(i);
+ item = new TableItem(UserTable,SWT.NONE);
+ item.setText(0,new Integer(result.id).toString());
+ item.setText(1,result.name);
+ // item.setText(2,result.password);
+ item.setText(3,result.realName);
+ item.setText(4,model.accessRightsName(result.level));
+ }
+ tab3group4.setVisible(false);
+ }
+ });
+ }
+ {
+ add1 = new Button(tab3Group3,SWT.PUSH | SWT.CENTER);
+ add1.setText("Add");
+ FormData addLData = new FormData();
+ addLData.width = 45;
+ addLData.height = 21;
+ addLData.left = new FormAttachment(0, 1000, 7);
+ addLData.top = new FormAttachment(0, 1000, 254);
+ add1.setLayoutData(addLData);
+ add1.setToolTipText("add new User ");
+ add1.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ tab3group5.setVisible(true);
+ }
+ });
+ }
+ {
+ UserTable = new Table(tab3Group3,SWT.SINGLE|SWT.FULL_SELECTION);
+ FormData UserTableLData = new FormData();
+ UserTableLData.width = 467;
+ UserTableLData.height = 224;
+ UserTableLData.left = new FormAttachment(11, 1000, 0);
+ UserTableLData.right = new FormAttachment(988, 1000, 0);
+ UserTableLData.top = new FormAttachment(19, 1000, 0);
+ UserTableLData.bottom = new FormAttachment(864, 1000, 0);
+ UserTable.setLayoutData(UserTableLData);
+ UserTable.setHeaderVisible(true);
+ UserTable.setToolTipText("registrated User");
+ UserTable.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ userTableId.setText(UserTable.getSelection()[0].getText(0));
+ username.setText(UserTable.getSelection()[0].getText(1));
+ passwd.setText(UserTable.getSelection()[0].getText(2));
+ userTableName.setText(UserTable.getSelection()[0].getText(3));
+ adminCombo.setText(UserTable.getSelection()[0].getText(4));
+ tab3group4.setVisible(true);
+ }
+ });
+ {
+ TableColumn id = new TableColumn(UserTable,SWT.BEGINNING);
+ id.setText("ID");
+ id.setWidth(45);
+ id.setMoveable(true);
+ id.addListener(SWT.Selection, new SortListener(this,UserTable,0,5));
+ TableColumn userName = new TableColumn(UserTable,SWT.BEGINNING);
+ userName.setMoveable(true);
+ userName.setText("Username");
+ userName.setWidth(120);
+ userName.addListener(SWT.Selection, new SortListener(this,UserTable,1,5));
+ TableColumn passwd = new TableColumn(UserTable,SWT.BEGINNING);
+ passwd.setMoveable(true);
+ passwd.setText("Password");
+ passwd.setWidth(120);
+ passwd.addListener(SWT.Selection, new SortListener(this,UserTable,2,5));
+ TableColumn name = new TableColumn(UserTable,SWT.BEGINNING);
+ name.setMoveable(true);
+ name.setText("Name");
+ name.setWidth(130);
+ name.addListener(SWT.Selection, new SortListener(this,UserTable,3,5));
+ TableColumn admin = new TableColumn(UserTable,SWT.BEGINNING);
+ admin.setMoveable(true);
+ admin.setText("Admin");
+ admin.setWidth(74);
+ admin.addListener(SWT.Selection, new SortListener(this,UserTable,4,5));
+ //TableColumn huhu=new TableColumn(UserTable,SWT.BEGINNING);
+ //huhu.dispose();
+ ArrayList<YalpUser> resultList = model.getUser();
+ for (int i = 0; i < resultList.size(); i++) {
+ TableItem item;
+ YalpUser result = resultList.get(i);
+ item = new TableItem(UserTable,SWT.NONE);
+ item.setText(0,new Integer(result.id).toString());
+ item.setText(1,result.name);
+ //item.setText(2,result.passwd);
+ item.setText(3,result.realName);
+ item.setText(4,model.accessRightsName(result.level));
+ }
+ }
+ }
+ }
+ {
+ tab3group4 = new Group(container3,SWT.NONE);
+ FormLayout tab3group4Layout = new FormLayout();
+ tab3group4.setLayout(tab3group4Layout);
+ tab3group4.setText("Edit User");
+ GridData tab3group4LData = new GridData();
+ tab3group4LData.widthHint = 256;
+ tab3group4LData.heightHint = 284;
+ tab3group4.setLayoutData(tab3group4LData);
+ tab3group4.setVisible(false);
+ {
+ save = new Button(tab3group4,SWT.PUSH | SWT.CENTER);
+ save.setText("save");
+ FormData saveLData = new FormData();
+ saveLData.width = 45;
+ saveLData.height = 21;
+ saveLData.left = new FormAttachment(0, 1000, 42);
+ saveLData.top = new FormAttachment(0, 1000, 157);
+ save.setLayoutData(saveLData);
+ save.setToolTipText("save Changes");
+ save.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ YalpUser toChange = new YalpUser();
+ toChange.id = new Integer(userTableId.getText()).intValue();
+ toChange.name = username.getText();
+ model.changeUser(toChange, passwd.getText(), Action.EDIT);
+ while(UserTable.getItemCount()!=0){
+ UserTable.remove(0);
+ }
+ ArrayList<YalpUser> resultList = model.getUser();
+ for (int i = 0; i < resultList.size(); i++) {
+ TableItem item;
+ YalpUser result = resultList.get(i);
+ item = new TableItem(UserTable,SWT.NONE);
+ item.setText(0,new Integer(result.id).toString());
+ item.setText(1,result.name);
+ //item.setText(2,result.passwd);
+ item.setText(3,result.realName);
+ item.setText(4,model.accessRightsName(result.level));
+ }
+ tab3group4.setVisible(false);
+ }
+ });
+ }
+ {
+ userTableName = new Text(tab3group4,SWT.NONE);
+ FormData text2LData = new FormData();
+ text2LData.width = 94;
+ text2LData.height = 14;
+ text2LData.left = new FormAttachment(0, 1000, 117);
+ text2LData.top = new FormAttachment(0, 1000, 112);
+ userTableName .setLayoutData(text2LData);
+ }
+ {
+ passwd = new Text(tab3group4,SWT.NONE);
+ FormData passwdLData = new FormData();
+ passwdLData.width = 94;
+ passwdLData.height = 14;
+ passwdLData.left = new FormAttachment(0, 1000, 117);
+ passwdLData.top = new FormAttachment(0, 1000, 92);
+ passwd.setLayoutData(passwdLData);
+ }
+ {
+ username = new Text(tab3group4,SWT.NONE);
+ FormData usernameLData = new FormData();
+ usernameLData.width = 94;
+ usernameLData.height = 14;
+ usernameLData.left = new FormAttachment(0, 1000, 117);
+ usernameLData.top = new FormAttachment(0, 1000, 72);
+ username.setLayoutData(usernameLData);
+ }
+ {
+ userTableId = new Text(tab3group4,SWT.NONE);
+ FormData text1LData = new FormData();
+ text1LData.width = 94;
+ text1LData.height = 14;
+ text1LData.left = new FormAttachment(0, 1000, 117);
+ text1LData.top = new FormAttachment(0, 1000, 52);
+ userTableId.setLayoutData(text1LData);
+ userTableId.setEditable(false);
+ }
+ {
+ adminLabel = new CLabel(tab3group4,SWT.NONE);
+ adminLabel.setText("Admin:");
+ FormData adminLabelLData = new FormData();
+ adminLabelLData.width = 42;
+ adminLabelLData.height = 21;
+ adminLabelLData.left = new FormAttachment(0, 1000, 27);
+ adminLabelLData.top = new FormAttachment(0, 1000, 127);
+ adminLabel.setLayoutData(adminLabelLData);
+ }
+ {
+ idLable = new CLabel(tab3group4,SWT.NONE);
+ idLable.setText("Id:");
+ FormData idLableLData = new FormData();
+ idLableLData.width = 20;
+ idLableLData.height = 21;
+ idLableLData.left = new FormAttachment(107, 1000, 0);
+ idLableLData.right = new FormAttachment(185, 1000, 0);
+ idLableLData.top = new FormAttachment(167, 1000, 0);
+ idLableLData.bottom = new FormAttachment(241, 1000, 0);
+ idLable.setLayoutData(idLableLData);
+ }
+ {
+ usernameLable = new CLabel(tab3group4,SWT.NONE);
+ usernameLable.setText("Username:");
+ FormData usernameLableLData = new FormData();
+ usernameLableLData.width = 58;
+ usernameLableLData.height = 21;
+ usernameLableLData.left = new FormAttachment(107, 1000, 0);
+ usernameLableLData.right = new FormAttachment(333, 1000, 0);
+ usernameLableLData.top = new FormAttachment(237, 1000, 0);
+ usernameLableLData.bottom = new FormAttachment(311, 1000, 0);
+ usernameLable.setLayoutData(usernameLableLData);
+ }
+ {
+ passwdLable = new CLabel(tab3group4,SWT.NONE);
+ passwdLable.setText("Password:");
+ FormData passwdLableLData = new FormData();
+ passwdLableLData.width = 56;
+ passwdLableLData.height = 21;
+ passwdLableLData.left = new FormAttachment(107, 1000, 0);
+ passwdLableLData.right = new FormAttachment(326, 1000, 0);
+ passwdLableLData.top = new FormAttachment(308, 1000, 0);
+ passwdLableLData.bottom = new FormAttachment(382, 1000, 0);
+ passwdLable.setLayoutData(passwdLableLData);
+ }
+ {
+ nameLable = new CLabel(tab3group4,SWT.NONE);
+ nameLable.setText("Name:");
+ FormData nameLableLData = new FormData();
+ nameLableLData.width = 37;
+ nameLableLData.height = 21;
+ nameLableLData.left = new FormAttachment(107, 1000, 0);
+ nameLableLData.right = new FormAttachment(251, 1000, 0);
+ nameLableLData.top = new FormAttachment(378, 1000, 0);
+ nameLableLData.bottom = new FormAttachment(452, 1000, 0);
+ nameLable.setLayoutData(nameLableLData);
+ }
+ {
+ adminCombo = new CCombo(tab3group4,SWT.NONE);
+ FormData adminComboLData = new FormData();
+ adminComboLData.width = 81;
+ adminComboLData.height = 16;
+ adminComboLData.left = new FormAttachment(458, 1000, 0);
+ adminComboLData.right = new FormAttachment(849, 1000, 0);
+ adminComboLData.top = new FormAttachment(466, 1000, 0);
+ adminComboLData.bottom = new FormAttachment(522, 1000, 0);
+ adminCombo.setLayoutData(adminComboLData);
+ {
+ adminCombo.add("true");
+ adminCombo.add("false");
+ }
+ }
+ }
+ tab3group5 = new Group(container3,SWT.NONE);
+ FormLayout tab3group5Layout = new FormLayout();
+ tab3group5.setLayout(tab3group5Layout);
+ GridData tab3group5LData = new GridData();
+ tab3group5LData.widthHint = 500;
+ tab3group5LData.heightHint = 99;
+ tab3group5.setLayoutData(tab3group5LData);
+ tab3group5.setText("Add User");
+ tab3group5.setVisible(false);
+ {
+ submitButton = new Button(tab3group5,SWT.PUSH | SWT.CENTER);
+ submitButton.setText("Submit");
+ FormData submitButtonLData = new FormData();
+ submitButtonLData.width = 50;
+ submitButtonLData.height = 21;
+ submitButtonLData.left = new FormAttachment(0, 1000, 382);
+ submitButtonLData.top = new FormAttachment(0, 1000, 52);
+ submitButton.setLayoutData(submitButtonLData);
+ submitButton.setToolTipText("add User");
+ submitButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ System.out.println("submit");
+ YalpUser toChange = new YalpUser();
+ toChange.id = 100;
+ toChange.name = usernameAdd.getText();
+ toChange.realName = realnameAdd.getText();
+ model.changeUser(toChange, passwdAdd.getText(), Action.CREATE);
+ while(UserTable.getItemCount()!=0){
+ UserTable.remove(0);
+ }
+ ArrayList<YalpUser> resultList = model.getUser();
+ for (int i = 0; i < resultList.size(); i++) {
+ TableItem item;
+ YalpUser result = resultList.get(i);
+ item = new TableItem(UserTable,SWT.NONE);
+ item.setText(0,new Integer(result.id).toString());
+ item.setText(1,result.name);
+ //item.setText(2,result.passwd);
+ item.setText(3,result.realName);
+ item.setText(4,model.accessRightsName(result.level));
+ }
+ }
+ });
+ }
+ {
+ adminAddLabel = new CLabel(tab3group5,SWT.NONE);
+ adminAddLabel.setText("Admin:");
+ FormData adminAddLabelLData = new FormData();
+ adminAddLabelLData.width = 40;
+ adminAddLabelLData.height = 21;
+ adminAddLabelLData.left = new FormAttachment(0, 1000, 291);
+ adminAddLabelLData.top = new FormAttachment(0, 1000, 17);
+ adminAddLabel.setLayoutData(adminAddLabelLData);
+ }
+ {
+ passwdAddLable = new CLabel(tab3group5,SWT.NONE);
+ passwdAddLable.setText("Password:");
+ FormData passwdAddLableLData = new FormData();
+ passwdAddLableLData.width = 60;
+ passwdAddLableLData.height = 21;
+ passwdAddLableLData.left = new FormAttachment(0, 1000, 17);
+ passwdAddLableLData.top = new FormAttachment(0, 1000, 57);
+ passwdAddLable.setLayoutData(passwdAddLableLData);
+ }
+ {
+ usernameAddLable = new CLabel(tab3group5,SWT.NONE);
+ usernameAddLable.setText("Username:");
+ FormData usernameAddLableLData = new FormData();
+ usernameAddLableLData.width = 60;
+ usernameAddLableLData.height = 21;
+ usernameAddLableLData.left = new FormAttachment(0, 1000, 17);
+ usernameAddLableLData.top = new FormAttachment(0, 1000, 37);
+ usernameAddLable.setLayoutData(usernameAddLableLData);
+ }
+ {
+ realnameAddLabel = new CLabel(tab3group5,SWT.NONE);
+ realnameAddLabel.setText("Name:");
+ FormData realnameAddLabelLData = new FormData();
+ realnameAddLabelLData.width = 60;
+ realnameAddLabelLData.height = 21;
+ realnameAddLabelLData.left = new FormAttachment(0, 1000, 17);
+ realnameAddLabelLData.top = new FormAttachment(0, 1000, 17);
+ realnameAddLabel.setLayoutData(realnameAddLabelLData);
+ }
+ {
+ adminAdd = new CCombo(tab3group5,SWT.NONE);
+ FormData adminAddLData = new FormData();
+ adminAddLData.width = 65;
+ adminAddLData.height = 12;
+ adminAddLData.left = new FormAttachment(0, 1000, 347);
+ adminAddLData.top = new FormAttachment(0, 1000, 22);
+ adminAdd.setLayoutData(adminAddLData);
+ adminAdd.setText("false");
+ {
+ adminAdd.add("false");
+ adminAdd.add("true");
+ }
+ }
+ {
+ realnameAdd = new Text(tab3group5,SWT.NONE);
+ FormData realnameAddLData = new FormData();
+ realnameAddLData.width = 174;
+ realnameAddLData.height = 14;
+ realnameAddLData.left = new FormAttachment(0, 1000, 82);
+ realnameAddLData.top = new FormAttachment(0, 1000, 22);
+ realnameAdd.setLayoutData(realnameAddLData);
+ }
+ {
+ usernameAdd = new Text(tab3group5,SWT.NONE);
+ FormData usernameAddLData = new FormData();
+ usernameAddLData.width = 174;
+ usernameAddLData.height = 13;
+ usernameAddLData.left = new FormAttachment(165, 1000, 0);
+ usernameAddLData.right = new FormAttachment(525, 1000, 0);
+ usernameAddLData.top = new FormAttachment(429, 1000, 0);
+ usernameAddLData.bottom = new FormAttachment(560, 1000, 0);
+ usernameAdd.setLayoutData(usernameAddLData);
+ }
+ {
+ FormData PasswdAddLData = new FormData();
+ PasswdAddLData.width = 174;
+ PasswdAddLData.height = 13;
+ PasswdAddLData.left = new FormAttachment(165, 1000, 0);
+ PasswdAddLData.right = new FormAttachment(525, 1000, 0);
+ PasswdAddLData.top = new FormAttachment(631, 1000, 0);
+ PasswdAddLData.bottom = new FormAttachment(762, 1000, 0);
+ passwdAdd = new Text(tab3group5,SWT.NONE);
+ passwdAdd.setLayoutData(PasswdAddLData);
+ }
+ }
+ }
+ cTabFolder1.setSelection(0);
+ }
+ else{
+ GridData testLData = new GridData();
+ testLData.widthHint = 792;
+ testLData.heightHint = 590;
+ Composite simpelUser = new Composite(this, SWT.NONE);
+ RowLayout testLayout = new RowLayout(org.eclipse.swt.SWT.HORIZONTAL);
+ simpelUser.setLayout(testLayout);
+ simpelUser.setLayoutData(testLData);
+ {
+ topComposite = new Composite(simpelUser,SWT.NONE);
+ GridLayout topCompositeLayout = new GridLayout();
+ topCompositeLayout.makeColumnsEqualWidth = true;
+ topCompositeLayout.numColumns = 2;
+ topCompositeLayout.verticalSpacing = 2;
+ topCompositeLayout.horizontalSpacing = 5;
+ topComposite.setLayout(topCompositeLayout);
+ RowData topCompositeLData = new RowData();
+ topCompositeLData.width = 783;
+ topCompositeLData.height = 566;
+ topComposite.setLayoutData(topCompositeLData);
+ {
+ find = new Group(topComposite,SWT.NONE);
+ this.find(find,resultComposite,playlistComposite,bottemComposite,1);
+ }
+ {
+ logo = new Group(topComposite,SWT.NONE);
+ this.logo(logo);
+ }
+ {
+ resultComposite = new Composite(topComposite,SWT.NONE);
+ resultTable1 = new Table(resultComposite,SWT.MULTI|SWT.FULL_SELECTION);
+ resultTable1.setToolTipText("Medias");
+ resultTable1.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ add2.setEnabled(true);
+ }
+ });
+ this.resultTable(resultComposite,resultTable1,1);
+ }
+ {
+ playlistComposite = new Composite(topComposite,SWT.NONE);
+ FormLayout playlistCompositeLayout = new FormLayout();
+ playlistComposite.setLayout(playlistCompositeLayout);
+ GridData playlistCompositeLData = new GridData();
+ playlistCompositeLData.heightHint = 390;
+ playlistCompositeLData.horizontalAlignment = GridData.FILL;
+ playlistComposite.setLayoutData(playlistCompositeLData);
+ playlistComposite.setVisible(false);
+ playlistComposite.setSize(238, 390);
+ {
+ next = new Button(playlistComposite,SWT.PUSH | SWT.CENTER);
+ FormData nextLData = new FormData();
+ nextLData.width = 45;
+ nextLData.height = 21;
+ nextLData.left = new FormAttachment(0, 1000, 185);
+ nextLData.top = new FormAttachment(0, 1000, 365);
+ next.setLayoutData(nextLData);
+ next.setEnabled(false);
+ next.setFont(SWTResourceManager.getFont("Times", 8, 1, false, false));
+ next.setToolTipText("play next Title");
+ next.setImage(forwardImage);
+ next.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ model.next();
+ }
+ });
+ }
+ {
+ stop = new Button(playlistComposite,SWT.PUSH | SWT.CENTER);
+ FormData stopLData = new FormData();
+ stopLData.width = 35;
+ stopLData.height = 21;
+ stopLData.left = new FormAttachment(0, 1000, 91);
+ stopLData.top = new FormAttachment(0, 1000, 365);
+ stop.setLayoutData(stopLData);
+ stop.setImage(new Image(this.getDisplay(),"img/stop.gif"));
+ stop.setEnabled(false);
+ stop.setToolTipText("stop");
+ stop.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ if (model.stop()){
+ play.setEnabled(true);
+ next.setEnabled(false);
+ stop.setEnabled(false);
+ play.setImage(playImage);
+ play.setToolTipText("play");
+ isNotPlaying=true;
+ }
+
+ }
+ });
+ }
+ {
+ play = new Button(playlistComposite,SWT.PUSH | SWT.CENTER);
+ FormData playLData = new FormData();
+ playLData.width = 35;
+ playLData.height = 21;
+ playLData.left = new FormAttachment(0, 1000, 50);
+ playLData.top = new FormAttachment(0, 1000, 365);
+ play.setLayoutData(playLData);
+ play.setImage(playImage);
+ play.setEnabled(false);
+ play.setToolTipText("play");
+ play.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ stop.setEnabled(true);
+ if (playlistTable.getItemCount()>1)next.setEnabled(true);
+ del.setEnabled(false);
+ //add2.setEnabled(false);
+ if (isNotPlaying){
+ play.setCursor(SWTResourceManager.getCursor(SWT.CURSOR_WAIT));
+ if(model.play()){
+ play.setImage(pauseImage);
+ play.setToolTipText("pause");
+ play.setCursor(SWTResourceManager.getCursor(SWT.NONE));
+ isNotPlaying= false;
+ }else;
+ }else{
+ if(model.pause()){
+ if (paused){
+ play.setImage(playImage);
+ play.setToolTipText("play");
+ paused=false;
+ }else{
+ play.setImage(pauseImage);
+ play.setToolTipText("pause");
+ paused=true;
+ }
+ }else;
+ }
+
+ }
+ });
+ }
+ {
+ add2 = new Button(playlistComposite,SWT.PUSH | SWT.CENTER);
+ FormData addLData = new FormData();
+ addLData.width = 25;
+ addLData.height = 21;
+ addLData.left = new FormAttachment(0, 1000, 2);
+ addLData.top = new FormAttachment(0, 1000, 160);
+ add2.setLayoutData(addLData);
+ add2.setText(">>");
+ add2.setEnabled(false);
+ add2.setToolTipText("add to Playlist");
+ add2.setFont(SWTResourceManager.getFont("Times", 8, 1, false, false));
+ add2.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ if (System.getProperty("os.name")== "Mac OS X"){
+ for (int i=resultTable1.getSelectionCount()-1;i>=0;i--){
+ int id=new Integer(resultTable1.getSelection()[i].getText(0)).intValue();
+ System.out.println(resultTable1.getSelection()[i].getText(1));
+ model.add2PlayList(id);
+ }
+ }else{
+ for (int i=0;i<resultTable1.getSelectionCount();i++){
+ int id=new Integer(resultTable1.getSelection()[i].getText(0)).intValue();
+ System.out.println(resultTable1.getSelection()[i].getText(1));
+ model.add2PlayList(id);
+ }
+ }
+ while(playlistTable.getItemCount()!=0){
+ playlistTable.remove(0);
+ }
+ ArrayList<Media> playlist=model.getToPlaylist();
+ for(int i=0;i<playlist.size();i++){
+ Media result=playlist.get(i);
+ TableItem item = new TableItem(playlistTable,SWT.NONE);
+ item.setText(0,result.name);
+ item.setText(1,result.duration);
+ }
+ play.setEnabled(true);
+ if (playlistTable.getItemCount()>1&& !isNotPlaying)next.setEnabled(true);
+ }
+ });
+ }
+ {
+ del = new Button(playlistComposite,SWT.PUSH | SWT.CENTER);
+ FormData delLData = new FormData();
+ delLData.width = 25;
+ delLData.height = 21;
+ delLData.left = new FormAttachment(0, 1000, 2);
+ delLData.top = new FormAttachment(0, 1000, 200);
+ del.setLayoutData(delLData);
+ del.setEnabled(false);
+ del.setToolTipText("del from Playlist");
+ del.setText("<<");
+ del.setFont(SWTResourceManager.getFont("Times", 8, 1, false, false));
+ del.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ for (int i=playlistTable.getSelectionCount()-1;i>=0;i--){
+ int pos = playlistTable.getSelectionIndices()[i];
+ model.removeFromPlayList(pos);
+ }
+
+ del.setEnabled(false);
+ while(playlistTable.getItemCount()!=0){
+ playlistTable.remove(0);
+ }
+ ArrayList<Media> playlist=model.getToPlaylist();
+ for(int i=0;i<playlist.size();i++){
+ Media result=playlist.get(i);
+ TableItem item = new TableItem(playlistTable,SWT.NONE);
+ item.setText(0,result.name);
+ item.setText(1,result.duration);
+ }
+ if (playlistTable.getItemCount()==0)play.setEnabled(false);
+ }
+ });
+ }
+ {
+ playlistTable = new Table(playlistComposite,SWT.MULTI|SWT.FULL_SELECTION);
+ playlistTable.setHeaderVisible(true);
+ FormData playlistTableLData = new FormData();
+ playlistTableLData.width = 184;
+ playlistTableLData.height = 330;
+ playlistTableLData.top = new FormAttachment(24, 1000, 0);
+ playlistTableLData.left = new FormAttachment(0, 1000, 38);
+ playlistTable.setLayoutData(playlistTableLData);
+ playlistTable.setToolTipText("Playlist");
+ playlistTable.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ if (isNotPlaying)del.setEnabled(true);
+ }
+ });
+ TableColumn title = new TableColumn(playlistTable,SWT.LEFT);
+ title.setText("Title");
+ title.setWidth(120);
+ title.setMoveable(true);
+ TableColumn duration = new TableColumn(playlistTable,SWT.RIGHT);
+ duration.setText("Duration");
+ duration.setWidth(80);
+ duration.setMoveable(true);
+ }
+ }
+ }
+ }
+ }
+ this.layout();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ //TODO:start find
+ private void find(Group find,Composite resultComposite, Composite playlistComposite,Composite bottemComposite,int _tab){
+ final Text searchField = new Text(find,SWT.NONE);
+ final Button findButton = new Button(find,SWT.PUSH | SWT.CENTER);
+ final Button allCheckBox = new Button(find,SWT.RADIO | SWT.LEFT);
+ final Button videoCheckBox = new Button(find,SWT.RADIO | SWT.LEFT);
+ final Button audioCheckBox = new Button(find,SWT.RADIO | SWT.LEFT);
+ final CLabel returnNum= new CLabel(find, SWT.NONE);
+ final int tab=_tab;
+ {
+ cLabel2 = new CLabel(find, SWT.NONE);
+ if (tab==1)cLabel2.setText("find and stream mutimedia files");
+ else cLabel2.setText("find and manage mutimedia files");
+ FormData cLabel2LData = new FormData();
+ cLabel2LData.width = 250;
+ cLabel2LData.height = 21;
+ cLabel2LData.left = new FormAttachment(0,1000,46);
+ cLabel2LData.top = new FormAttachment(0,1000,13);
+ cLabel2.setLayoutData(cLabel2LData);
+ }
+ {
+
+ FormData allCheckBoxLData = new FormData();
+ allCheckBoxLData.left = new FormAttachment(0, 1000, 95);
+ allCheckBoxLData.top = new FormAttachment(0, 1000, 98);
+ allCheckBoxLData.width = 56;
+ allCheckBoxLData.height = 14;
+ allCheckBox.setLayoutData(allCheckBoxLData);
+ allCheckBox.setText("All");
+ allCheckBox.setSelection(true);
+ allCheckBox.setToolTipText("Find Audio and Video Files");
+ allCheckBox.addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent evt) {
+ if (evt.character == SWT.CR) {
+ searchPressed(
+ searchField,
+ videoCheckBox,
+ audioCheckBox,
+ returnNum,
+ tab);
+ }
+ }
+ });
+ }
+ {
+
+ FormData audioCheckBoxLData = new FormData();
+ audioCheckBoxLData.left = new FormAttachment(0, 1000, 195);
+ audioCheckBoxLData.top = new FormAttachment(0, 1000, 98);
+ audioCheckBoxLData.width = 56;
+ audioCheckBoxLData.height = 14;
+ audioCheckBox.setLayoutData(audioCheckBoxLData);
+ audioCheckBox.setText("Audio");
+ audioCheckBox.setToolTipText("Find Audio Files");
+ audioCheckBox
+ .addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent evt) {
+ if (evt.character == SWT.CR) {
+ searchPressed(
+ searchField,
+ videoCheckBox,
+ audioCheckBox,
+ returnNum,
+ tab);
+ }
+ }
+ });
+ }
+ {
+
+ FormData videoCheckBoxLData = new FormData();
+ videoCheckBoxLData.left = new FormAttachment(0, 1000, 296);
+ videoCheckBoxLData.top = new FormAttachment(0, 1000, 98);
+ videoCheckBoxLData.width = 56;
+ videoCheckBoxLData.height = 14;
+ videoCheckBox.setLayoutData(videoCheckBoxLData);
+ videoCheckBox.setText("Video");
+ videoCheckBox.setToolTipText("Find Video Files");
+ videoCheckBox
+ .addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent evt) {
+ if (evt.character == SWT.CR) {
+ searchPressed(
+ searchField,
+ videoCheckBox,
+ audioCheckBox,
+ returnNum,
+ tab);
+ }
+ }
+ });
+ }
+
+
+ FormLayout findLayout = new FormLayout();
+ find.setLayout(findLayout);
+ GridData findLData = new GridData();
+ findLData.widthHint = 497;
+ findLData.heightHint = 130;
+ find.setLayoutData(findLData);
+ find.setSize(497, 104);
+ find.addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent evt) {
+ if (evt.character==SWT.CR){
+ searchPressed(searchField,videoCheckBox,audioCheckBox,returnNum,tab);
+ }
+ }
+ });
+ {
+ //searchField
+ FormData searchFieldLData = new FormData();
+ searchFieldLData.width = 344;
+ searchFieldLData.height = 20;
+ searchFieldLData.left = new FormAttachment(0,1000,37);
+ searchFieldLData.top = new FormAttachment(0,1000,55);
+ searchField.setLayoutData(searchFieldLData);
+ searchField.setFont(SWTResourceManager.getFont("Times",12,0,false,false));
+ searchField.setToolTipText("Keyword");
+ searchField.addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent evt) {
+ if (evt.character==SWT.CR){
+ searchPressed(searchField,videoCheckBox,audioCheckBox,returnNum,tab);
+ }
+ }
+ });
+ }
+ {
+ //findButton
+ findButton.setText("Find");
+ FormData findButtonLData = new FormData(70,26);
+ findButtonLData.width = 70;
+ findButtonLData.height = 26;
+ findButtonLData.left = new FormAttachment(0,1000,403);
+ findButtonLData.top = new FormAttachment(0,1000,52);
+ findButton.setLayoutData(findButtonLData);
+ findButton.setSize(70, 26);
+ findButton.setToolTipText("Find");
+ findButton.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ add2.setEnabled(false);
+ searchPressed(searchField,videoCheckBox,audioCheckBox,returnNum,tab);
+ }
+ });
+ }
+ {
+ returnNum.setText("");
+ FormData returnNumLData = new FormData();
+ returnNumLData.width = 63;
+ returnNumLData.height = 21;
+ returnNumLData.left = new FormAttachment(0, 1000, 410);
+ returnNumLData.top = new FormAttachment(0, 1000, 93);
+ returnNum.setLayoutData(returnNumLData);
+ }
+ }
+
+ //TODO logo
+ private void logo(Group logo){
+ FormLayout logoLayout = new FormLayout();
+ logo.setLayout(logoLayout);
+ GridData logoLData = new GridData();
+ logoLData.widthHint = 260;
+ logoLData.heightHint = 130;
+ logo.setLayoutData(logoLData);
+ logoLayout.marginWidth=30;
+ logoLayout.marginHeight=0;
+ {
+ cLabel2 = new CLabel(logo,SWT.NONE);
+ cLabel2.setImage(new Image(this.getDisplay(),"img/yalpV2.gif"));
+ }
+
+
+
+ }
+
+
+
+ //TODO resultComposite
+ private void resultTable(Composite resultComposite,Table resultTable,int tab){
+
+ resultComposite.setVisible(false);
+ FormLayout resultCompositeLayout = new FormLayout();
+ resultComposite.setLayout(resultCompositeLayout);
+ GridData resultCompositeLData = new GridData();
+ resultCompositeLData.widthHint = 502;
+ if (tab==1)resultCompositeLData.heightHint = 390;
+ else resultCompositeLData.heightHint = 380;
+ resultComposite.setLayoutData(resultCompositeLData);
+ {
+ FormData resultTableLData = new FormData();
+ resultTableLData.width = 482;
+ if (tab==1)resultTableLData.height = 365;
+ else resultTableLData.height = 313;
+ resultTableLData.left = new FormAttachment(0, 1000, 0);
+ resultTableLData.top = new FormAttachment(0, 1000, 7);
+ resultTable.setLayoutData(resultTableLData);
+ resultTable.setHeaderVisible(true);
+ TableColumn id = new TableColumn(resultTable,SWT.RIGHT);
+ id.setText("ID");
+ id.setWidth(0);
+ id.setMoveable(true);
+ id.addListener(SWT.Selection, new SortListener(this,resultTable,0,8));
+ TableColumn title = new TableColumn(resultTable,SWT.LEFT);
+ title.setText("Title");
+ title.setWidth(110);
+ title.setMoveable(true);
+ title.addListener(SWT.Selection, new SortListener(this,resultTable,1,8));
+ TableColumn author = new TableColumn(resultTable,SWT.LEFT);
+ author.setText("Author");
+ author.setWidth(100);
+ author.setMoveable(true);
+ author.addListener(SWT.Selection, new SortListener(this,resultTable,2,8));
+ TableColumn album = new TableColumn(resultTable,SWT.LEFT);
+ album.setText("Album");
+ album.setWidth(100);
+ album.setMoveable(true);
+ album.addListener(SWT.Selection, new SortListener(this,resultTable,3,8));
+ TableColumn year = new TableColumn(resultTable,SWT.LEFT);
+ year.setText("Year");
+ year.setWidth(60);
+ year.setMoveable(true);
+ year.addListener(SWT.Selection, new SortListener(this,resultTable,4,8));
+ TableColumn category = new TableColumn(resultTable,SWT.LEFT);
+ category.setText("Category");
+ category.setWidth(60);
+ category.setMoveable(true);
+ category.addListener(SWT.Selection, new SortListener(this,resultTable,5,8));
+ TableColumn type = new TableColumn(resultTable,SWT.LEFT);
+ type.setText("Type");
+ type.setWidth(60);
+ type.setMoveable(true);
+ type.addListener(SWT.Selection, new SortListener(this,resultTable,6,8));
+ }
+
+ }
+ private void saveButtonWidgetSelected(SelectionEvent evt) {
+ try{
+ int OwnerId = model.getOwnerid(ownerId.getText());
+ Media media = new Media();
+ media.id = new Integer(id.getText()).intValue();
+ media.name = title.getText();
+ media.duration = duration.getText();
+ media.lastEdit = new Date(System.currentTimeMillis()).toString();
+ media.path = path.getText();
+ media.fileName = name.getText();
+ /* t.b.d.
+ author.getText();
+ album.getText();
+ category.getText();
+ year.getText();
+ new Integer(aBitrate.getText()).intValue();
+ new Integer(vBitrate.getText()).intValue();
+ resolution.getText();
+ OwnerId;
+ */
+ if (model.changeMedia(media, Action.EDIT)) {
+ int select=resultTable2.getSelectionIndex();
+ TableItem item= new TableItem(resultTable2,SWT.NONE,select);
+ item.setText(0,new Integer(media.id).toString());
+ item.setText(1,media.name);
+ /* t.b.d. read from string props
+ item.setText(2,media.author.name);
+ item.setText(3,media.album);
+ item.setText(4,media.year);
+ item.setText(5,media.category);
+ */
+ item.setText(6,model.getTypeName(media.type));
+ resultTable2.remove(select+1);
+ resultTable2.setSelection(select);
+ changeComposite.setVisible(false);
+ deleteButton.setVisible(false);
+ }
+ }catch (Exception e){
+ System.out.println("Exception in SaveButton"+e);
+ }
+ }
+
+ private void searchPressed(Text searchField,Button videoCheckBox,Button audioCheckBox,CLabel returnNum,int tab){
+ String search = searchField.getText();
+ int returnVal;
+ ArrayList<MediaType> types = new ArrayList<MediaType>();
+
+ if( videoCheckBox.getSelection() )
+ types.add(MediaType.VIDEO);
+
+ if( audioCheckBox.getSelection() )
+ types.add(MediaType.SOUND);
+ /* t.b.d. add IMAGE support */
+
+ if (tab==1){
+ while(resultTable1.getItemCount()!=0){
+ resultTable1.remove(0);
+ }
+ }else{
+ while(resultTable2.getItemCount()!=0){
+ resultTable2.remove(0);
+ }
+ }
+ returnVal= model.search(search, types, tab);
+ ArrayList<Media>resultList=model.getMedia(tab);
+ for(int i=0;i<resultList.size();i++){
+ TableItem item;
+ Media result=resultList.get(i);
+ if (tab==1) item=new TableItem(resultTable1,SWT.NONE);
+ else item= new TableItem(resultTable2,SWT.NONE);
+ item.setText(0,new Integer(result.id).toString());
+ item.setText(1,result.name);
+ /* t.b.d. add string_props support
+ if(result.author != null)
+ item.setText(2,result.author);
+
+ if(result.album != null)
+ item.setText(3,result.album);
+
+ if(result.year != null)
+ item.setText(4,result.year);
+
+ if(result.category != null)
+ item.setText(5,result.category);
+ */
+ if(result.type != null)
+ item.setText(6,model.getTypeName(result.type));
+
+ }
+ if (tab==1){
+ if (returnVal==1)returnNum.setText(returnVal+" Media");
+ else returnNum.setText(returnVal+" Medias");
+ resultComposite.setVisible(true);
+ playlistComposite.setVisible(true);
+ //bottemComposite.setVisible(true);
+ }
+ if (tab==2){
+ if (returnVal==1)returnNum.setText(returnVal+" Media");
+ else returnNum.setText(returnVal+" Medias");
+ composite1.setVisible(true);
+ }
+ }
+
+
+ private void deleteButtonWidgetSelected(SelectionEvent evt) {
+ try{
+ for (int i=resultTable2.getSelectionCount()-1;i>=0;i--){
+
+ Media result = model.getMediaWithId(
+ new Integer(resultTable2.getSelection()[i].getText(0)).intValue(),2 );
+
+ changeComposite.setVisible(false);
+ deleteButton.setVisible(false);
+ model.changeMedia(result, Action.DELETE);
+ resultTable2.remove(resultTable2.getSelectionIndices()[i]);
+ }
+ }catch (Exception e){
+ System.out.println("Exception in DeleteButton "+e);
+ }
+ }
+ private void addButtonWidgetSelected(SelectionEvent evt) {
+ System.out.println("browser not implemented in yalp v2");
+ }
+
+
+ public void refillIpTable(){
+ /* t.b.d. replace by session viewer
+ try{
+ ArrayList<ClientInfo> list=model.srvCon.getClientInfo();
+ while(iptable.getItemCount()!=0){
+ iptable.remove(0);
+ }
+ for(ClientInfo info : list){
+ TableItem item = new TableItem(iptable,SWT.NONE);
+ item.setText(0,info.getUserName());
+ item.setText(1,info.getIp());
+ }
+ }catch(Exception e){System.out.println("geht nicht "+e);}
+ */
+ }
+
+ public void show(){
+ ((Shell)this.parent).setImage(new Image(display,"img/yalpV2_klein.gif"));
+ ((Shell)this.parent).setText("yalp");
+ this.parent.addListener(SWT.Dispose,new org.eclipse.swt.widgets.Listener(){
+ public void handleEvent(org.eclipse.swt.widgets.Event e) {
+ ShellClose();
+ }
+ });
+ Point size = this.getSize();
+ java.awt.Dimension screen = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
+ Rectangle shellBounds = this.parent.computeTrim((screen.width-size.x)/2,(screen.height-size.y)/2,size.x,size.y);
+ this.parent.setLayout(new FillLayout());
+ this.parent.layout();
+ this.parent.setBounds(shellBounds);
+ ((Shell)this.parent).open();
+ while (!this.parent.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ }
+ public void ShellClose(){
+ this.model.logoff();
+ System.exit(0);
+ }
+
+}
+
diff --git a/src/YalpClients/SwtClient/GUI/InitGUI.java b/src/YalpClients/SwtClient/GUI/InitGUI.java
new file mode 100644
index 0000000..6b1fa51
--- /dev/null
+++ b/src/YalpClients/SwtClient/GUI/InitGUI.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpClients.SwtClient.GUI;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+import YalpClients.SwtClient.*;
+import YalpInterfaces.AccessRights;
+
+/*
+ * Class InitGUI
+ *
+ * <em></em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 1 02-04-2006<br>
+ *
+ */
+
+public class InitGUI {
+ private Model model;
+ private Display display;
+ private int time = 1000;
+
+ public InitGUI(Model model,AccessRights kind){
+ this.model=model;
+ this.display = Display.getDefault();
+ final Runnable timer = new Runnable() {
+ public void run() {
+ serverStillAlive(this);
+ }
+ };
+ display.timerExec(time, timer);
+
+ GUI gui= new GUI(
+ new Shell(display ,SWT.MIN), display, model, kind, SWT.NULL );
+ gui.show();
+ }
+
+ public void serverStillAlive(Runnable timer){
+ model.serverStillAlive();
+ if (!this.model.getLogoff()){
+ this.display.timerExec(time, timer);
+ }
+ }
+
+}
diff --git a/src/YalpClients/SwtClient/GUI/LoadDialog.java b/src/YalpClients/SwtClient/GUI/LoadDialog.java
new file mode 100644
index 0000000..dcdc4a8
--- /dev/null
+++ b/src/YalpClients/SwtClient/GUI/LoadDialog.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpClients.SwtClient.GUI;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+/*
+ * Class LoadDialog
+ *
+ * <em></em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 1 02-04-2006<br>
+ */
+public class LoadDialog extends Composite{
+
+ {
+ //Register as a resource user - SWTResourceManager will
+ //handle the obtaining and disposing of resources
+ SWTResourceManager.registerResourceUser(this);
+ }
+
+ private CLabel cLabel1;
+ private CLabel cLabel2;
+ private CLabel cLabel3;
+ private Shell parent;
+
+ public LoadDialog(Composite parent, int style) {
+ super(parent, style);
+ this.parent=(Shell)parent;
+ initDialog();
+ }
+
+ private void initDialog(){
+ GridLayout thisLayout = new GridLayout();
+ thisLayout.makeColumnsEqualWidth = true;
+ this.setLayout(thisLayout);
+ this.setSize(300,170);
+ {
+ Composite composite = new Composite(this, SWT.NONE);
+ FormLayout compositeLayout = new FormLayout();
+ composite.setLayout(compositeLayout);
+ GridData compositeLData = new GridData();
+ compositeLData.widthHint = 287;
+ compositeLData.heightHint = 165;
+ composite.setLayoutData(compositeLData);
+ composite.setVisible(true);
+ {
+ cLabel3 = new CLabel(composite, SWT.LEFT);
+ cLabel3.setText("Copyright (c) 2006 Manuel Traut and Volker Dahnke");
+ FormData cLabel3LData = new FormData();
+ cLabel3LData.width = 300;
+ cLabel3LData.height = 20;
+ cLabel3LData.left = new FormAttachment(0, 1000, 0);
+ cLabel3LData.top = new FormAttachment(0, 1000, 145);
+ cLabel3.setLayoutData(cLabel3LData);
+ cLabel3.setFont(SWTResourceManager.getFont("Times", 7, 0, false, false));
+ }
+ {
+ cLabel2 = new CLabel(composite, SWT.CENTER);
+ cLabel2.setText("Loading...");
+ FormData cLabel2LData = new FormData();
+ cLabel2LData.width = 105;
+ cLabel2LData.height = 25;
+ cLabel2LData.left = new FormAttachment(0, 1000, 91);
+ cLabel2LData.top = new FormAttachment(0, 1000, 123);
+ cLabel2.setLayoutData(cLabel2LData);
+ cLabel2.setFont(SWTResourceManager.getFont("Times", 12, 1, false, false));
+ }
+ {
+ cLabel1 = new CLabel(composite, SWT.CENTER);
+ FormData cLabel1LData = new FormData();
+ cLabel1LData.width = 200;
+ cLabel1LData.height = 120;
+ cLabel1LData.left = new FormAttachment(0, 1000, 40);
+ cLabel1LData.top = new FormAttachment(0, 1000, 0);
+ cLabel1.setLayoutData(cLabel1LData);
+ cLabel1.setImage(new Image(this.getDisplay(),"img/yalpV2.gif"));
+ }
+
+ }
+ }
+
+ public void show(){
+ Point size = this.getSize();
+ java.awt.Dimension screen = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
+ Rectangle shellBounds = this.parent.computeTrim((screen.width-size.x)/2,(screen.height-size.y)/2,size.x,size.y);
+ this.parent.setLayout(new FillLayout());
+ this.parent.layout();
+ this.parent.setBounds(shellBounds);
+ this.parent.open();
+ }
+
+ public void close(){
+ this.parent.close();
+ }
+}
diff --git a/src/YalpClients/SwtClient/GUI/SWTResourceManager.java b/src/YalpClients/SwtClient/GUI/SWTResourceManager.java
new file mode 100644
index 0000000..87dffc3
--- /dev/null
+++ b/src/YalpClients/SwtClient/GUI/SWTResourceManager.java
@@ -0,0 +1,145 @@
+package YalpClients.SwtClient.GUI;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Vector;
+
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Widget;
+
+/*
+ * Class to manage SWT resources (Font, Color, Image and Cursor)
+ * There are no restrictions on the use of this code.
+ *
+ * You may change this code and your changes will not be overwritten,
+ * but if you change the version number below then this class will be
+ * completely overwritten by Jigloo.
+ * #SWTResourceManager:version4.0.0#
+ */
+public class SWTResourceManager {
+
+ private static HashMap resources = new HashMap();
+ private static Vector users = new Vector();
+ private static SWTResourceManager instance = new SWTResourceManager();
+
+ private static DisposeListener disposeListener = new DisposeListener() {
+ public void widgetDisposed(DisposeEvent e) {
+ users.remove(e.getSource());
+ if (users.size() == 0)
+ dispose();
+ }
+ };
+
+ /*
+ * This method should be called by *all* Widgets which use resources
+ * provided by this SWTResourceManager. When widgets are disposed,
+ * they are removed from the "users" Vector, and when no more
+ * registered Widgets are left, all resources are disposed.
+ * <P>
+ * If this method is not called for all Widgets then it should not be called
+ * at all, and the "dispose" method should be explicitly called after all
+ * resources are no longer being used.
+ */
+ public static void registerResourceUser(Widget widget) {
+ if (users.contains(widget))
+ return;
+ users.add(widget);
+ widget.addDisposeListener(disposeListener);
+ }
+
+ public static void dispose() {
+ Iterator it = resources.keySet().iterator();
+ while (it.hasNext()) {
+ Object resource = resources.get(it.next());
+ if (resource instanceof Font)
+ ((Font) resource).dispose();
+ else if (resource instanceof Color)
+ ((Color) resource).dispose();
+ else if (resource instanceof Image)
+ ((Image) resource).dispose();
+ else if (resource instanceof Cursor)
+ ((Cursor) resource).dispose();
+ }
+ resources.clear();
+ }
+
+ public static Font getFont(String name, int size, int style) {
+ return getFont(name, size, style, false, false);
+ }
+
+ public static Font getFont(String name, int size, int style, boolean strikeout, boolean underline) {
+ String fontName = name + "|" + size + "|" + style + "|" + strikeout + "|" + underline;
+ if (resources.containsKey(fontName))
+ return (Font) resources.get(fontName);
+ FontData fd = new FontData(name, size, style);
+ if (strikeout || underline) {
+ try {
+ Class lfCls = Class.forName("org.eclipse.swt.internal.win32.LOGFONT");
+ Object lf = FontData.class.getField("data").get(fd);
+ if (lf != null && lfCls != null) {
+ if (strikeout)
+ lfCls.getField("lfStrikeOut").set(lf, new Byte((byte) 1));
+ if (underline)
+ lfCls.getField("lfUnderline").set(lf, new Byte((byte) 1));
+ }
+ } catch (Throwable e) {
+ System.err.println(
+ "Unable to set underline or strikeout" + " (probably on a non-Windows platform). " + e);
+ }
+ }
+ Font font = new Font(Display.getDefault(), fd);
+ resources.put(fontName, font);
+ return font;
+ }
+
+ public static Image getImage(String url, Control widget) {
+ Image img = getImage(url);
+ if(img != null && widget != null)
+ img.setBackground(widget.getBackground());
+ return img;
+ }
+
+ public static Image getImage(String url) {
+ try {
+ url = url.replace('\\', '/');
+ if (url.startsWith("/"))
+ url = url.substring(1);
+ if (resources.containsKey(url))
+ return (Image) resources.get(url);
+ Image img = new Image(Display.getDefault(), instance.getClass().getClassLoader().getResourceAsStream(url));
+ if (img != null)
+ resources.put(url, img);
+ return img;
+ } catch (Exception e) {
+ System.err.println("SWTResourceManager.getImage: Error getting image "+url+", "+e);
+ return null;
+ }
+ }
+
+ public static Color getColor(int red, int green, int blue) {
+ String name = "COLOR:" + red + "," + green + "," + blue;
+ if (resources.containsKey(name))
+ return (Color) resources.get(name);
+ Color color = new Color(Display.getDefault(), red, green, blue);
+ resources.put(name, color);
+ return color;
+ }
+
+ public static Cursor getCursor(int type) {
+ String name = "CURSOR:" + type;
+ if (resources.containsKey(name))
+ return (Cursor) resources.get(name);
+ Cursor cursor = new Cursor(Display.getDefault(), type);
+ resources.put(name, cursor);
+ return cursor;
+ }
+
+}
diff --git a/src/YalpClients/SwtClient/GUI/SortListener.java b/src/YalpClients/SwtClient/GUI/SortListener.java
new file mode 100644
index 0000000..a2ff35a
--- /dev/null
+++ b/src/YalpClients/SwtClient/GUI/SortListener.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpClients.SwtClient.GUI;
+
+import java.text.Collator;
+import java.util.Locale;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.*;
+
+/*
+ * Class SortListener
+ *
+ * <em></em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 1 02-04-2006<br>
+ */
+public class SortListener implements Listener{
+ private Table table;
+ private int colum,numColum;
+ private GUI gui;
+
+ public SortListener(GUI gui,Table table,int colum,int numColum){
+ this.colum=colum;
+ this.numColum=numColum;
+ this.table=table;
+ this.gui=gui;
+ }
+
+ public void handleEvent(Event e) {
+ TableItem[] items = table.getItems();
+ Collator collator = Collator.getInstance(Locale.getDefault());
+ for (int i = 1; i < items.length; i++) {
+ String value1 = items[i].getText(colum);
+ for (int j = 0; j < i; j++) {
+ String value2 = items[j].getText(colum);
+ if (collator.compare(value1, value2) < 0) {
+ String[] values= new String[numColum];
+ for(int g=0;g<numColum;g++){
+ values[g]= items[i].getText(g);
+ }
+ items[i].dispose();
+ TableItem item = new TableItem(table, SWT.NONE, j);
+ item.setText(values);
+ items = table.getItems();
+ break;
+ }
+ }
+ }
+ gui.changeComposite.setVisible(false);
+ table.setSelection(0);
+ }
+}
+
diff --git a/src/YalpClients/SwtClient/GUI/StartDialog.java b/src/YalpClients/SwtClient/GUI/StartDialog.java
new file mode 100644
index 0000000..11ecc7f
--- /dev/null
+++ b/src/YalpClients/SwtClient/GUI/StartDialog.java
@@ -0,0 +1,236 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpClients.SwtClient.GUI;
+
+import YalpClients.SwtClient.Model;
+import YalpInterfaces.AccessRights;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.*;
+import org.eclipse.swt.events.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.layout.*;
+import org.eclipse.swt.widgets.*;
+
+/*
+ * Class StartDialog
+ *
+ * <em></em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 1 02-04-2006<br>
+ */
+public class StartDialog extends Composite {
+
+ {
+ //Register as a resource user - SWTResourceManager will
+ //handle the obtaining and disposing of resources
+ SWTResourceManager.registerResourceUser(this);
+ }
+ private Display display;
+ private CLabel cLabel1;
+ private CLabel LogoLabel;
+ private Model model;
+ private Composite parent;
+ private Composite composite;
+ private CLabel logonLable;
+ private Button ok;
+ private Text passwd;
+ private Text username;
+ private CLabel passwdLable;
+ private CLabel usernameLable;
+
+
+ public StartDialog(Composite parent,Model model, int style) {
+ super(parent, style);
+
+ this.parent=parent;
+ this.model=model;
+ this.display=Display.getDefault();
+ initStartDialog();
+ }
+
+ private void initStartDialog(){
+ GridLayout thisLayout = new GridLayout();
+ thisLayout.makeColumnsEqualWidth = true;
+ this.setLayout(thisLayout);
+ this.setSize(300,150);
+ Listener listener =new Listener() {
+ public void handleEvent(org.eclipse.swt.widgets.Event evt) {
+ if (evt.character==SWT.CR){
+ OkPressed();
+ }
+ }
+ };
+ addListener(SWT.KeyDown,listener);
+ {
+ composite = new Composite(this, SWT.NONE);
+ FormLayout compositeLayout = new FormLayout();
+ composite.setLayout(compositeLayout);
+ GridData compositeLData = new GridData();
+ compositeLData.widthHint = 287;
+ compositeLData.heightHint = 140;
+ composite.setLayoutData(compositeLData);
+ composite.setVisible(true);
+ composite.addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent evt) {
+ if (evt.character==SWT.CR){
+ OkPressed();
+ }
+ }
+ });
+ {
+ cLabel1 = new CLabel(composite, SWT.NONE);
+ FormData cLabel1LData = new FormData();
+ cLabel1LData.width = 120;
+ cLabel1LData.height = 20;
+ cLabel1LData.left = new FormAttachment(0, 1000, 93);
+ cLabel1LData.top = new FormAttachment(0, 1000, 40);
+ cLabel1.setLayoutData(cLabel1LData);
+ Color col =display.getSystemColor(SWT.COLOR_RED);
+ cLabel1.setForeground(col);
+ cLabel1.setFont(SWTResourceManager.getFont("Times", 10, 1, false, false));
+ }
+ {
+ LogoLabel = new CLabel(composite, SWT.NONE);
+ FormData LogoLabelLData = new FormData();
+ LogoLabelLData.width = 70;
+ LogoLabelLData.height = 42;
+ LogoLabelLData.left = new FormAttachment(0, 1000, 77);
+ LogoLabelLData.top = new FormAttachment(0, 1000, 0);
+ LogoLabelLData.right = new FormAttachment(1000, 1000, -140);
+ LogoLabelLData.bottom = new FormAttachment(1000, 1000, -98);
+ LogoLabel.setLayoutData(LogoLabelLData);
+ LogoLabel.setImage(new Image(this.getDisplay(),"img/yalpV2_mittel.gif"));
+ }
+ {
+ logonLable = new CLabel(composite, SWT.BEGINNING);
+ logonLable.setText("Login");
+ FormData logonLableLData = new FormData();
+ logonLableLData.width = 70;
+ logonLableLData.height = 28;
+ logonLableLData.left = new FormAttachment(0, 1000, 147);
+ logonLableLData.top = new FormAttachment(0, 1000, 5);
+ logonLable.setLayoutData(logonLableLData);
+ logonLable.setFont(SWTResourceManager.getFont("Times", 14, 1, false, false));
+ }
+ {
+ username = new Text(composite, SWT.NONE);
+ FormData usernameLData = new FormData();
+ usernameLData.width = 117;
+ usernameLData.height = 15;
+ usernameLData.left = new FormAttachment(0, 1000, 120);
+ usernameLData.top = new FormAttachment(0, 1000, 65);
+ username.setLayoutData(usernameLData);
+ username.setFocus();
+ username.addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent evt) {
+ if (evt.character==SWT.CR){
+ OkPressed();
+ }
+ }
+ });
+ }
+ {
+ passwd = new Text(composite, SWT.PASSWORD);
+ FormData passwdLData = new FormData();
+ passwdLData.width = 117;
+ passwdLData.height = 15;
+ passwdLData.left = new FormAttachment(0, 1000, 120);
+ passwdLData.top = new FormAttachment(0, 1000, 88);
+ passwd.setLayoutData(passwdLData);
+ passwd.addKeyListener(new KeyAdapter() {
+ public void keyPressed(KeyEvent evt) {
+ if (evt.character==SWT.CR){
+ OkPressed();
+ }
+ }
+ });
+ }
+ {
+ ok = new Button(composite, SWT.PUSH | SWT.CENTER);
+ ok.setText("OK");
+ FormData okLData = new FormData();
+ okLData.width = 65;
+ okLData.height = 21;
+ okLData.left = new FormAttachment(0, 1000, 110);
+ okLData.top = new FormAttachment(0, 1000, 115);
+ ok.setLayoutData(okLData);
+ ok.setFont(SWTResourceManager.getFont("Times", 10, 1, false, false));
+ ok.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent evt) {
+ OkPressed();
+ }
+ });
+ }
+ {
+ passwdLable = new CLabel(composite, SWT.NONE);
+ passwdLable.setText("Password:");
+ FormData passwdLableLData = new FormData();
+ passwdLableLData.width = 70;
+ passwdLableLData.height = 20;
+ passwdLableLData.left = new FormAttachment(0, 1000, 35);
+ passwdLableLData.top = new FormAttachment(0, 1000, 83);
+ passwdLable.setLayoutData(passwdLableLData);
+ passwdLable.setFont(SWTResourceManager.getFont("Times", 10, 0, false, false));
+ }
+ {
+ usernameLable = new CLabel(composite, SWT.NONE);
+ usernameLable.setText("Username:");
+ FormData usernameLableLData = new FormData();
+ usernameLableLData.width = 70;
+ usernameLableLData.height = 20;
+ usernameLableLData.left = new FormAttachment(0, 1000, 35);
+ usernameLableLData.top = new FormAttachment(0, 1000, 60);
+ usernameLable.setLayoutData(usernameLableLData);
+ usernameLable.setFont(SWTResourceManager.getFont("Times", 10, 0, false, false));
+ }
+ }
+ this.layout();
+
+ }
+ private void OkPressed(){
+ AccessRights kind;
+ kind = model.userVerify(username.getText(), passwd.getText());
+
+ if (kind.value() == AccessRights._NO_YALP_SERVER ) {
+ cLabel1.setText("Server offline");
+ } else if (kind.value() == AccessRights._DENY ){
+ cLabel1.setText("Access Denied");
+ username.setText("");
+ passwd.setText("");
+ username.setFocus();
+ } else {
+ display.close();
+ InitGUI gui = new InitGUI(model, kind);
+ }
+
+ }
+
+ public void show(){
+ ((Shell)this.parent).setImage(new Image(display,"img/yalpV2_klein.gif"));
+ ((Shell)this.parent).setText("yalp");
+ Point size = this.getSize();
+ java.awt.Dimension screen = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
+ Rectangle shellBounds = this.parent.computeTrim((screen.width-size.x)/2,(screen.height-size.y)/2,size.x,size.y);
+ this.parent.setLayout(new FillLayout());
+ this.parent.layout();
+ this.parent.setBounds(shellBounds);
+ ((Shell)this.parent).open();
+ while (!this.parent.isDisposed()) {
+ if (!display.readAndDispatch())
+ display.sleep();
+ }
+ }
+
+
+}
diff --git a/src/YalpClients/SwtClient/Model.java b/src/YalpClients/SwtClient/Model.java
new file mode 100755
index 0000000..3c48615
--- /dev/null
+++ b/src/YalpClients/SwtClient/Model.java
@@ -0,0 +1,744 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpClients.SwtClient;
+
+import YalpInterfaces.*;
+import YalpClients.*;
+
+import java.beans.XMLDecoder;
+import java.beans.XMLEncoder;
+import java.io.*;
+import java.net.Inet4Address;
+import java.net.MalformedURLException;
+import java.net.UnknownHostException;
+import java.sql.SQLException;
+import java.util.ArrayList;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
+
+import org.omg.CosNaming.*;
+import org.omg.CosNaming.NamingContextPackage.*;
+import org.omg.CORBA.*;
+
+/*
+ * Class Model
+ *
+ * <em>Implementiert die Schnittstellenfunktionen zur Steuerung des Servers
+ * (Datenbankinhalte schreiben, lesen; Streaming steuern</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 0.6 14-12-2005<br>
+ *
+ * @see client.GUI
+ */
+
+public class Model {
+
+ public ServerControlInterface srvCon;
+ private Process vlcPlayer;
+ private Output actualStream;
+ private Output streamInfo;
+ private ArrayList<Media> findMedia;
+ private ArrayList<Media> editMedia;
+ private ArrayList<Media> toPlaylist;
+ private ArrayList<Media> playList;
+ private ArrayList<YalpUser> userList;
+ private ClientConfiguration settings;
+ private String clientIP;
+ private String curPasswd;
+ private AccessRights userGroup=AccessRights.DENY;
+ private String userName;
+ private Boolean playback = false;
+ private Boolean logoff= false;
+ private Session session;
+/*
+ * Instances srvConnection to Registry, DbConnection, ServerControl
+ * and VlcStreamer. Also instances Class variables
+ */
+ public Model(String[] argv) {
+
+ this.settings=new ClientConfiguration();
+ loadConfig("ClientConfiguration.xml");
+ writeConfig("ClientConfiguration.xml");
+
+ try {
+ ORB orb = ORB.init(argv, null);
+
+ org.omg.CORBA.Object objRef =
+ orb.resolve_initial_references("NameService");
+
+ NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
+
+ String name = "YALP_Server";
+ srvCon = ServerControlInterfaceHelper.narrow(ncRef.resolve_str(name));
+ } catch (Exception e) {// DEBUG
+ String errorStr="couldn't connect to YALP Server";
+
+ MessageBox messageBox = new MessageBox(
+ new Shell(Display.getDefault(),SWT.MIN), SWT.OK );
+
+ System.out.println(e);
+ messageBox.setMessage(errorStr);
+ messageBox.open();
+ System.exit(0);
+ }
+
+ // determine client IP Adress
+ try {
+ this.clientIP = Inet4Address.getLocalHost().getHostAddress();
+ System.out.println(this.clientIP);
+ } catch (UnknownHostException e) {
+ String errorStr = "Model.model: determine IP failed";
+
+ MessageBox messageBox = new MessageBox(
+ new Shell(Display.getDefault(),SWT.MIN), SWT.OK );
+
+ System.out.println(errorStr);
+ messageBox.setMessage(errorStr);
+ messageBox.open();
+ System.exit(0);
+ }
+ this.userList = new ArrayList<YalpUser>();
+ this.playList = new ArrayList<Media>();
+ this.toPlaylist = new ArrayList<Media>();
+ }
+
+/*
+ * write Configuration to XML File
+ *
+ * @param fileName
+ * @return boolean: true if succesful
+ */
+ public boolean writeConfig(String fileName) {
+ try {
+ FileOutputStream srvConfigFile = new FileOutputStream(fileName);
+ XMLEncoder srvConfigWriter = new XMLEncoder(srvConfigFile);
+ srvConfigWriter.writeObject(settings.serverIP);
+ srvConfigWriter.writeObject(settings.classServerPort);
+ srvConfigWriter.writeObject(settings.registryPort);
+ srvConfigWriter.writeObject(settings.vlcCommand);
+ srvConfigWriter.close();
+ } catch (FileNotFoundException fnfe) {
+ return false;
+ }
+ return true;
+ }
+
+/*
+ * load Configuration from XML File if possible
+ *
+ * @param fileName
+ * @return boolean: true if succesful
+ */
+ public boolean loadConfig(String fileName){
+ try{
+ FileInputStream srvConfigFile = new FileInputStream(fileName);
+ XMLDecoder srvConfigLoader = new XMLDecoder(srvConfigFile);
+ System.out.println(srvConfigFile);
+ settings.serverIP = (String)srvConfigLoader.readObject();
+ settings.classServerPort= (Integer)srvConfigLoader.readObject();
+ settings.registryPort = (Integer)srvConfigLoader.readObject();
+ settings.vlcCommand = (String)srvConfigLoader.readObject();
+ srvConfigLoader.close();
+ } catch(FileNotFoundException fnfe) {
+ System.out.println("Configuration not found, loading defaults...");
+ return false;
+ } catch(ClassCastException cce) {
+ System.out.println("Errors in Configuration, loading defaults...");
+ return false;
+ }
+ return true;
+ }
+
+/*
+ * get acutal srvConfig object
+ *
+ * @return ClientConfiguration: aktuelle Konfiguration
+ */
+ public ClientConfiguration getConfig(){
+ return this.settings;
+ }
+
+/*
+ * setzen und speichern eines ClientConfiguration Files
+ *
+ * @param set
+ * ClientConfiguration.xml
+ * @return boolean: true if succesful written Configuration
+ */
+ public boolean setConfig(ClientConfiguration set){
+ this.settings = set;
+ return this.writeConfig("ClientConfiguration.xml");
+ }
+
+/*
+ * Sends YalpUsername and passwd to Server and returns YalpUsergroup
+ *
+ * @param username
+ * @param passwd
+ * @return AccessRights
+ */
+ public AccessRights userVerify(String username,String passwd){
+ this.userName=username;
+ this.curPasswd = passwd;
+ YalpErrorHolder err = new YalpErrorHolder();
+ SessionHolder sess = new SessionHolder();
+ try{
+ // log on server
+ this.srvCon.clientLogon(this.userName,passwd,this.clientIP,sess,err);
+ this.session = sess.value;
+ this.userGroup = sess.value.me.level;
+ /*
+ } catch (RemoteException e) {
+ System.out.println("client.Model: Logon on Server failed 1"+ e);
+ e.printStackTrace();
+ System.out.println("client.Model: Logon on Server failed 1");
+ } catch (MalformedURLException e) {
+ System.out.println("client.Model: Logon on Server failed 2");
+ } catch (SQLException e) {
+ System.out.println("client.Model: Logon on Server failed 3");
+ } catch (NotBoundException e) {
+ System.out.println("client.Model: Logon on Server failed 4");
+ */
+ }catch(NullPointerException e){
+ System.out.println("YALP Server couldn't be reached");
+ this.userGroup = AccessRights.NO_YALP_SERVER;
+ }
+ return this.userGroup;
+ }
+
+/*
+ * Gets a list with all YalpUsers from the server
+ *
+ * @return ArrayList<YalpUser> all registered YalpUsers
+ */
+ public ArrayList<YalpUser> getUser(){
+ YalpErrorHolder err = new YalpErrorHolder();
+ try{
+ UsersHolder usr = new UsersHolder();
+ this.srvCon.getUser(usr, err);
+ this.userList = new ArrayList<YalpUser>(usr.value.length);
+ for(int i = 0; i < usr.value.length; i++)
+ this.userList.add(usr.value[i]);
+ }catch(Exception e){
+ System.out.println("Exceoption in Model userList "+ e);
+ }
+ return userList;
+ }
+
+/*
+ * Sends User change request to server
+ *
+ * @param user
+ * Configuration with changes on specific YalpUser
+ */
+ public void changeUser(YalpUser user, String passwd, Action action) {
+ YalpErrorHolder err = new YalpErrorHolder();
+ try{
+ this.srvCon.changeUser( user,
+ passwd,
+ action,
+ err );
+ System.out.println(err.value.descr);
+ }catch(Exception e){
+ System.out.println("Exceoption in Model changeUser "+ e);
+ }
+ }
+
+/*
+ * Sends Media change request to server and refreshes Model data
+ *
+ * @param media
+ * to change
+ * @return boolean: succesful changed media
+ */
+ public Boolean changeMedia(Media media, Action action){
+ YalpErrorHolder err = new YalpErrorHolder();
+ try{
+ this.srvCon.changeMedia(media, action, err);
+ if(err.value.code == YalpErrorCode.OK){
+ Media result;
+ for (int i=0;i<this.editMedia.size();i++){
+ result=this.editMedia.get(i);
+ /* t.b.d. alter to new db desgin
+ if (result.id==media.id){
+ result.type=media.type;
+ result.title=media.title;
+ result.author=media.author;
+ result.album=media.album;
+ result.category=media.category;
+ result.year=media.year;
+ result.duration=media.duration;
+ result.aBitrate=media.aBitrate;
+ result.vBitrate=media.vBitrate;
+ result.resolution=media.resolution;
+ result.ownerId=media.ownerId;
+ result.lastEdit=media.lastEdit;
+ result.path=media.path;
+ result.name=media.name;
+ return true;
+ }
+ */
+ }
+ }
+ } catch(Exception e) {
+ System.out.println("Exceoption in Model changeUser "+ e);
+ }
+ return false;
+ }
+
+/*
+ * adds Media with given id to Playlist
+ *
+ * @param id
+ */
+ public void add2PlayList(int id){
+ Boolean notfound=true;
+ for (int i=0;(i<this.findMedia.size())&& (notfound);i++){
+ Media result=this.findMedia.get(i);
+ if (result.id==id){
+ String name = result.name;
+ String path = result.path;
+ if(playback){
+ this.add2Stream(name, path);
+ }
+ this.playList.add(result);
+ this.toPlaylist.add(result);
+ notfound=false;
+ }
+ }
+ }
+
+/*
+ * Removes Media with given id from Playlist
+ *
+ * @param id
+ */
+ public void removeFromPlayList(int id){
+ /* t.b.d.
+ this.playList.remItem(id);
+ this.toPlaylist.remove(id);
+ */
+ }
+
+/*
+ * Returns List with items to play
+ *
+ * @return ArrayList<Media>: ArrayList to create Playlist from
+ */
+ public ArrayList<Media> getToPlaylist(){
+ return this.toPlaylist;
+ }
+
+/*
+ * Creates new Stream with actual playlist
+ *
+ * @return Streaminfo: about new created Stream, Client should use this,
+ * information to get the Information howto receive the stream
+ */
+ public Output createOutput(){
+ /* t.b.d. former createStream */
+ this.streamInfo.outputAction = Action.CREATE;
+ Media[] a = {};
+ this.streamInfo.playlist = this.playList.toArray(a);
+ return this.streamInfo;
+ }
+
+/*
+ * Sends search request to server and refreshes Model data
+ *
+ * @param request
+ * Search Request
+ * @param kind
+ * 1 - search in first Window; other ints: search in other window
+ * (admins edit view)
+ * @return int: number of results
+ */
+ public int search(String request, ArrayList<MediaType> types, int kind){
+ YalpErrorHolder err = new YalpErrorHolder();
+ MediasHolder result = new MediasHolder();
+ try{
+ MediaType[] a = {};
+ if (kind == 1){
+ srvCon.search(request, types.toArray(a), result, err);
+ for(int i = 0; i < result.value.length; i++)
+ this.findMedia.add(result.value[i]);
+ return this.findMedia.size();
+ } else {
+ srvCon.search(request, types.toArray(a), result, err);
+ for(int i = 0; i < result.value.length; i++)
+ this.editMedia.add(result.value[i]);
+ return this.editMedia.size();
+ }
+ } catch(Exception e){
+ System.out.println("Exceoption in Model search "+ e);
+ return 0;
+ }
+ }
+
+/*
+ * Returns the search result
+ *
+ * @param kind
+ * 1 - for searchMedia of mainwindow; 2 - for searchMedia of editView
+ * @return ArrayList<Media>: last found medias
+ */
+
+ public ArrayList<Media> getMedia(int kind){
+ if (kind==1) return this.findMedia;
+ else return this.editMedia;
+ }
+
+/*
+ * Retuns search result with given id
+ *
+ * @param id
+ * of the result
+ * @param kind
+ * 1 - for mainWindow, 2 for admins editView
+ * @return Media: searchMedia, with specified ID
+ */
+ public Media getMediaWithId(int id,int kind){
+ ArrayList<Media> resultList;
+ if (kind==1)resultList= this.findMedia;
+ else resultList=this.editMedia;
+ for (int i=0;(i<resultList.size());i++){
+ Media result=resultList.get(i);
+ if (result.id==id){
+ return result;
+ }
+ }
+ return null;
+ }
+
+/*
+ * Retuns id of YalpUser with given username
+ *
+ * @param username
+ * @return int: useriD
+ */
+ public int getOwnerid(String username){
+ ArrayList<YalpUser> ownerList =this.userList;
+ for (YalpUser owner:ownerList){
+ if (owner.name.equals(username)){
+ return owner.id;
+ }
+ }
+ return 0;
+ }
+
+/*
+ * Returns MediaType as string
+ *
+ * @param mediatype
+ * @return string
+ */
+ public String getTypeName(MediaType type)
+ {
+ switch(type.value())
+ {
+ case MediaType._IMAGE:
+ return "image";
+ case MediaType._SOUND:
+ return "sound";
+ case MediaType._VIDEO:
+ return "video";
+ default:
+ return "unknown";
+ }
+ }
+
+/*
+ * Returns AccessRights as string
+ *
+ * @param mediatype
+ * @return string
+ */
+ public String accessRightsName(AccessRights type)
+ {
+ switch(type.value())
+ {
+ case AccessRights._USER:
+ return "user";
+ case AccessRights._ADMIN:
+ return "admin";
+ case AccessRights._DENY:
+ return "no login";
+ default:
+ return "unknown";
+ }
+ }
+
+
+/*
+ * Sets class variable actualStream to given value
+ *
+ * @param aStream
+ * stream to srvControl via play, pause, etc
+ */
+ public void setActualStream(Output aStream){
+ this.actualStream = aStream;
+ }
+
+/*
+ * Starts Video Lan Player
+ *
+ * @return boolean: true if vlc can be started and a stream is actualStream
+ */
+ private boolean startVLC(){
+
+ String vlcCmd = settings.vlcCommand +
+ " --reset-srvConfig --video-on-top -I telnet --telnet-port 12345 ";
+/*
+ switch (this.actualStream.getAccess()){
+ case UDP:
+ vlcCmd += "udp:@";
+ break;
+ case HTTP:
+ vlcCmd += "http://";
+ break;
+ default:
+ System.out.println(
+ "client.Model.startVLC: playback this type is not supported" );
+ }
+*/
+ vlcCmd += this.actualStream.info.params;
+ System.out.println(vlcCmd);
+
+ try {
+ this.vlcPlayer = Runtime.getRuntime().exec(vlcCmd);
+ } catch (IOException e) {
+ System.out.println("client.Model.startVLC: starting vlcPlayer failed");
+ return false;
+ }
+ return true;
+ }
+
+/*
+ * Stops Video Lan Player
+ *
+ */
+ private void stopVLC(){
+ this.playback = false;
+ this.vlcPlayer.destroy();
+ }
+
+/*
+ * Starts playback of actual playlist
+ *
+ * @return void
+ */
+ public boolean play(){
+
+ this.playback = true;
+
+ this.actualStream = this.createOutput();
+ this.actualStream.destIp = this.clientIP;
+
+ YalpErrorHolder err = new YalpErrorHolder();
+
+ OutputHolder tmp = new OutputHolder(this.actualStream);
+ this.srvCon.control(tmp, err);
+ this.actualStream = tmp.value;
+
+ this.actualStream.outputAction = Action.START;
+ OutputHolder tmp2 = new OutputHolder(this.actualStream);
+ this.srvCon.control(tmp2, err);
+ this.actualStream = tmp2.value;
+ this.startVLC();
+ return true;
+ }
+
+/*
+ * Adds a new Media to Playlist. Only during playback
+ *
+ * @param name
+ * @param path
+ * @return boolean: true if succesful added
+ */
+ public boolean add2Stream(String name, String path){
+
+ YalpErrorHolder err = new YalpErrorHolder();
+ Media[] empty = {};
+ this.actualStream.playlist = empty;
+
+ Media media = new Media();
+ media.path = path;
+ media.fileName = name;
+
+ this.actualStream.playlist[this.actualStream.playlist.length] = media;
+ this.actualStream.outputAction = Action.CREATE;
+
+ OutputHolder tmp = new OutputHolder(this.actualStream);
+ this.srvCon.control(tmp, err);
+ this.actualStream = tmp.value;
+ return true;
+ }
+
+/*
+ * Stops playback
+ *
+ * @return boolean: false - if srvConnection to streamer failed
+ */
+ public boolean stop(){
+ YalpErrorHolder err = new YalpErrorHolder();
+ this.actualStream.outputAction = Action.STOP;
+ OutputHolder tmp = new OutputHolder(this.actualStream);
+ this.srvCon.control(tmp,err);
+ this.actualStream = tmp.value;
+ this.stopVLC();
+ return true;
+ }
+
+/*
+ * jumps to next media in playlist
+ *
+ * @return boolean: false - if srvConnection to streamer failed
+ */
+ public boolean next(){
+ YalpErrorHolder err = new YalpErrorHolder();
+ this.actualStream.outputAction = Action.FORWARD;
+ OutputHolder tmp = new OutputHolder(this.actualStream);
+ this.srvCon.control(tmp,err);
+ this.actualStream = tmp.value;
+ return true;
+ }
+
+/*
+ * Pauses playback
+ *
+ * @return boolean: false - if srvConnection to streamer failed
+ */
+ public boolean pause(){
+ YalpErrorHolder err = new YalpErrorHolder();
+ this.actualStream.outputAction = Action.PAUSE;
+ OutputHolder tmp = new OutputHolder(this.actualStream);
+ this.srvCon.control(tmp,err);
+ this.actualStream = tmp.value;
+ return true;
+ }
+
+/*
+ * Causes the server to clean up and shutdown
+ *
+ */
+ public void serverShutdown(){
+ if (this.playback)
+ this.stop();
+ this.srvCon.serverShutdown();
+ }
+
+/*
+ * Checks if the server is still alive if not Client shutdown
+ *
+ */
+ public void serverStillAlive(){
+ // try{
+ // srvCon.ping();
+ /* }catch (RemoteException e){
+ if (this.playback)
+ this.stopVLC();
+ String errorStr="Server shutdown - Client is going down too";
+
+ MessageBox messageBox = new MessageBox(
+ new Shell(Display.getDefault(),SWT.MIN), SWT.OK);
+
+ System.out.println(errorStr);
+ messageBox.setMessage(errorStr);
+ messageBox.open();
+ System.exit(0);
+ } */
+ }
+
+/*
+ * Returns client IP address
+ *
+ * @return String: ipAddress
+ */
+ public String getClientIp(){
+ return this.clientIP;
+ }
+
+/*
+ * Returns username of logged in user
+ *
+ * @return String: username
+ */
+ public String getYalpUserName(){
+ return this.userName;
+ }
+
+/*
+ * Returns indication if playback is runing
+ *
+ * @return boolean: true - if is play'in
+ */
+ public Boolean getPlayback(){
+ return this.playback;
+ }
+
+/*
+ * Get Total amount of streams played
+ *
+ * @return int: number of Streams totally played
+ *
+ public int getAllStreamNum(){
+ try{
+ return this.srvCon.getStreamCounter().getAllStreams();
+ }catch (Exception e){
+ System.out.println("Exception in Model.getAllStreamNum"+e);
+ }
+ return -1;
+ }
+ */
+
+/*
+ * Gets amount of Streams actual playing
+ *
+ * @return int: number of Streams play'in at the moment
+ *
+ public int getActualStreamNum(){
+ try{
+ return this.srvCon.getStreamCounter().getActualStreams();
+ }catch (Exception e){
+ System.out.println("Exception in Model.getActualStreamNum"+e);
+ }
+ return -1;
+ }
+ */
+
+/*
+ * Sets class variable logoff to true and logs off from server
+ */
+ public void logoff(){
+ YalpErrorHolder err = new YalpErrorHolder();
+ try{
+ this.logoff=true;
+ this.srvCon.clientLogoff(this.session, err);
+ }catch(Exception e) {// DEBUG
+ System.out.println("Model Exeptions in logoff");
+ e.printStackTrace();
+ }
+ }
+
+/*
+ * Returns indication if client is logging of
+ *
+ * @return Boolean: true - if is logging of
+ */
+ public Boolean getLogoff(){
+ return this.logoff;
+ }
+}
diff --git a/src/YalpClients/SwtClient/SwtClient.java b/src/YalpClients/SwtClient/SwtClient.java
new file mode 100755
index 0000000..513d4ff
--- /dev/null
+++ b/src/YalpClients/SwtClient/SwtClient.java
@@ -0,0 +1,61 @@
+/*
+ *
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ *
+ */
+package YalpClients.SwtClient;
+
+import YalpClients.SwtClient.GUI.*;
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+
+/*
+ * Class SwtClient
+ *
+ * <em>static main method</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 0.1 20-11-2005<br>
+ */
+public class SwtClient{
+
+/*
+ * Client initialization
+ *
+ * @param argv
+ * arguments which are not used
+ */
+ public static void main (String[] argv) {
+ try{
+ System.setProperty("java.security.policy","client.policy");
+ }
+ catch (Exception e) {//DEBUG
+ System.out.println ("Server SecurityManagerExeptions not caught jet " + e);
+ System.exit(0);
+ }
+
+ LoadDialog load = new LoadDialog(
+ new Shell(Display.getDefault(),SWT.NONE), SWT.NONE);
+
+ load.show();
+ final Model model = new Model(argv);
+ load.close();
+
+ StartDialog start =
+ new StartDialog(new Shell(Display.getDefault(),SWT.MIN),model, SWT.NONE);
+
+ start.show();
+
+ return;
+ }
+}
diff --git a/src/YalpInputs/YalpPGSqlInput/DatabaseDefines.java b/src/YalpInputs/YalpPGSqlInput/DatabaseDefines.java
new file mode 100644
index 0000000..b6ee2ce
--- /dev/null
+++ b/src/YalpInputs/YalpPGSqlInput/DatabaseDefines.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+package YalpInputs.YalpPGSqlInput;
+
+/*
+ * Class DatabaseDefines
+ *
+ * <em></em>
+ *
+ * @author Manuel Traut
+ *
+ * @version 0.1 28-08-2008<br>
+ *
+ */
+
+public class DatabaseDefines {
+
+ public String dbConnection="jdbc:postgresql://10.0.3.20:5432/yalp_media";
+ public String dbUser="yalp";
+ public String dbPasswd="huhu";
+
+/*
+ * set string for dbConnection
+ * @param dbConnection
+ * "jdbc:postgresql://<serverIP>:<portOfDB>/<dataBaseName>";
+ */
+ public void setDBConnection(String dbConnection){
+ this.dbConnection = dbConnection;
+ }
+
+/*
+ * set userName for db Edit
+ * @param dbUser
+ */
+ public void setDBUser(String dbUser){
+ this.dbUser = dbUser;
+ }
+
+/*
+ * set string for db Password
+ * @param DBPasswd
+ */
+ public void setDBPasswd(String DBPasswd){
+ this.dbPasswd = DBPasswd;
+ }
+
+ public String getDBConnection(){
+ return this.dbConnection;
+ }
+
+ public String getDBUser(){
+ return this.dbUser;
+ }
+
+ public String getDBPasswd(){
+ return this.dbPasswd;
+ }
+}
diff --git a/src/YalpInputs/YalpPGSqlInput/PGSqlInput.java b/src/YalpInputs/YalpPGSqlInput/PGSqlInput.java
new file mode 100644
index 0000000..531f53d
--- /dev/null
+++ b/src/YalpInputs/YalpPGSqlInput/PGSqlInput.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpInputs.YalpPGSqlInput;
+
+import YalpInterfaces.*;
+
+import org.omg.CosNaming.*;
+import org.omg.CosNaming.NamingContextPackage.*;
+import org.omg.CORBA.*;
+import org.omg.PortableServer.*;
+import org.omg.PortableServer.POA;
+
+/*
+ * Class PGSqlInput
+ *
+ * <em>Postgre SQL database connection</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 2.0 2008-09-23<br>
+ */
+public class PGSqlInput {
+
+ private static ORB orb;
+ private static POA poa;
+ private static YalpInputPluginImpl psql;
+ private static InputPluginInterface inputPlugin;
+ private static ServerControlInterface srvCon;
+ private static PluginInfo pluginInfo;
+
+ public PGSqlInput(String[] argv) {
+
+ pluginInfo = new PluginInfo();
+ pluginInfo.name = "Postgre SQL Input Plugin";
+ pluginInfo.description = "provides information about files, which are stored on a harddisk and have been indicated to the YALP Postgre SQL database";
+ pluginInfo.type = PluginType.INPUT_PLUGIN;
+ pluginInfo.supportedTypes = new MediaType[3];
+ pluginInfo.supportedTypes[0] = MediaType.IMAGE;
+ pluginInfo.supportedTypes[1] = MediaType.VIDEO;
+ pluginInfo.supportedTypes[2] = MediaType.SOUND;
+ pluginInfo.access = new AccessInfo();
+ pluginInfo.access.name = "local files";
+ pluginInfo.access.description = "";
+ pluginInfo.access.executable = "";
+ pluginInfo.access.params = "";
+ pluginInfo.access.type = AccessType.FILES;
+
+ try {
+ this.orb = ORB.init(argv, null);
+ org.omg.CORBA.Object objRef =
+ orb.resolve_initial_references("NameService");
+ NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
+ poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
+ } catch(Exception e) {
+ /* t.b.d. error handling */
+ System.out.println("couldn't host plugin implementation");
+ }
+
+ try {
+ poa.the_POAManager().activate();
+ } catch(org.omg.PortableServer.POAManagerPackage.AdapterInactive e) {
+ /* t.b.d. error handling */
+ System.out.println("poa inactive");
+ }
+
+ YalpErrorHolder err = new YalpErrorHolder();
+
+ try {
+ org.omg.CORBA.Object objRef =
+ orb.resolve_initial_references("NameService");
+
+ NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
+ String name = "YALP_Server";
+ srvCon = ServerControlInterfaceHelper.narrow(ncRef.resolve_str(name));
+ } catch (Exception e) {
+ System.out.println("Couldn't connect to YALP Server");
+ System.exit(0);
+ }
+
+ psql = new YalpInputPluginImpl();
+ psql.setORB(orb);
+
+ try {
+ poa.activate_object(psql);
+ org.omg.CORBA.Object ref = poa.servant_to_reference(psql);
+ inputPlugin = InputPluginInterfaceHelper.narrow(ref);
+
+ org.omg.CORBA.Object objRef =
+ orb.resolve_initial_references("NameService");
+
+ NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
+ String name = "YALP_Postgre_SQL_Input";
+ NameComponent path[] = ncRef.to_name(name);
+ ncRef.rebind(path, inputPlugin);
+
+ PluginInfoHolder tmp = new PluginInfoHolder(pluginInfo);
+ srvCon.ping(err);
+ System.out.println(err.value.descr);
+ srvCon.registerInputPlugin(inputPlugin, tmp, err );
+ pluginInfo = tmp.value;
+
+ if(err.value.code != YalpErrorCode.OK)
+ System.out.println("registring inputplugin failed");
+ else
+ System.out.println("input plugin registered");
+
+ orb.run();
+
+ } catch (Exception e) {
+ System.out.println("binding plugin failed 1");
+ e.printStackTrace();
+ System.exit(0);
+ }
+ }
+}
diff --git a/src/YalpInputs/YalpPGSqlInput/YalpInputPluginImpl.java b/src/YalpInputs/YalpPGSqlInput/YalpInputPluginImpl.java
new file mode 100644
index 0000000..7f599be
--- /dev/null
+++ b/src/YalpInputs/YalpPGSqlInput/YalpInputPluginImpl.java
@@ -0,0 +1,189 @@
+package YalpInputs.YalpPGSqlInput;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.*;
+import java.sql.*;
+
+import org.omg.CosNaming.*;
+import org.omg.CosNaming.NamingContextPackage.*;
+import org.omg.CORBA.*;
+
+import YalpInterfaces.*;
+
+public class YalpInputPluginImpl extends InputPluginInterfacePOA {
+
+ private String db;
+ private String dbuser;
+ private String dbpasswd;
+ private Statement stat;
+ private Connection con;
+ private PluginInfo pluginInfo;
+ private ORB orb;
+
+ public YalpInputPluginImpl()
+ {
+ System.out.println("YalpInputPluginImpl()");
+ }
+
+ public void setORB(ORB _orb)
+ {
+ orb = _orb;
+ String db = "jdbc:postgresql://localhost:5432/yalp";
+ String dbYalpUser = "yalp";
+ String dbPasswd = "yalp";
+
+ try{
+ dbuser = dbYalpUser;
+ dbpasswd = dbPasswd;
+ Class.forName("org.postgresql.Driver");
+ con = DriverManager.getConnection(db,dbuser,dbpasswd);
+ System.out.println("YalpPGSqlInput: db connection established");
+ stat= con.createStatement();
+ } catch (SQLException e) {
+ System.out.println("Exception in PGSqlInput Constructor: "+e);
+ } catch (ClassNotFoundException e) {
+ System.out.println("Exception in PGSqlInput Constructor: "+e);
+ }
+ }
+
+/*
+ * submits changes to yalpMediaDatabase
+ *
+ * @param change
+ * describes the change to commit
+ * @return int
+ * -1 if failed
+ */
+ public void changeMedia (Media toChange, Action todo, YalpErrorHolder err) {
+ /* t.b.d. alter this to new database design
+ try{
+ String sql1,sql2,sql3;
+ int Return;
+ switch (change.updateType){
+ // if updateType is UPDATE
+ case UPDATE:
+ sql1="update \"medien\" set \"type\"='"+change.type+"', \"title\"='"+change.title+"', \"author\"='"+change.author+"', \"album\"='"+change.album+"', \"category\"='"+change.category+"', \"year\"='"+change.year+"', \"duration\"='"+change.duration+"', \"aBitrate\"="+change.aBitrate+", \"vBitrate\"="+change.vBitrate+", \"resolution\"='"+change.resolution+"', \"lastEdit\"='"+new java.util.Date(System.currentTimeMillis()).toString()+"' where \"id\"= "+change.id+" ;";
+ System.out.println(sql1);
+ Return=stat.executeUpdate(sql1);
+ break;
+ // if updateType is INSERT INTO
+ case INSERT:
+ sql1="insert into \"medien\" values(nextval('medienId'),'"+change.type+"','"+change.title+"','"+change.author+"','"+change.album+"','"+change.category+"','"+change.year+"','"+change.duration+"',"+change.aBitrate+","+change.vBitrate+",'"+change.resolution+"',"+change.ownerId+",'"+new java.util.Date(System.currentTimeMillis()).toString()+"','"+change.path+"','"+change.name+"');";
+ System.out.println(sql1);
+ Return=stat.executeUpdate(sql1);
+ break;
+ // if updateType is DELETE
+ case DELETE:
+ sql1="delete from \"medien\" where \"id\"= "+change.id+" ;";
+ System.out.println(sql1);
+ Return=stat.executeUpdate(sql1);
+ break;
+ default : return -1;
+ }
+ // perform operation on table an return number of updated rows
+ }catch(SQLException e){
+ System.out.println("Exception in PGSqlInput.changeMedia: "+e);
+ }
+ */
+ }
+
+/*
+ * returns an ArrayList of Results which are matching to the commited Find object
+ *
+ * @param media
+ * Object which describes search criterias
+ * @return ArrayList<Result>
+ * List with Results matching search criteria
+ */
+ public void search(String str, MediaType[] types, MediasHolder result, YalpErrorHolder err) {
+ /* t.b.d. alter this to new database design
+ try{
+ ArrayList <String > searchWords=stringCut(media.str);
+ String query= new String();
+ Boolean first;
+ for (int i=0;i<searchWords.size();i++){
+ first=true;
+ if (i!=0)query = query+") intersect ";
+ query= query+"select * from \"medien\" where (";
+ if (media.audio){
+ first=false;
+ query=query+"\"type\" = 'audio' ";
+ }
+ if (media.video){
+ if (first)first=false;
+ else query=query+"or ";
+ query=query+"\"type\" = 'video' ";
+ }
+ if (!first)query=query+") and (";
+ query=query+"\"title\" Ilike '%"+searchWords.get(i)+"%' or \"author\" Ilike '%"+searchWords.get(i)+"%' or \"album\" Ilike '%"+searchWords.get(i)+"%'or \"year\" Ilike '%"+searchWords.get(i)+"%'or \"category\" Ilike '%"+searchWords.get(i)+"%'";
+ }
+ query=query+")order by \"id\";";
+
+ ArrayList<Result> resultList=new ArrayList<Result>();
+ Statement stat= con.createStatement();
+ ResultSet result=stat.executeQuery(query);
+ while(result.next()){
+ resultList.add( new Result(result.getInt(1),result.getString(2),result.getString(3),result.getString(4),result.getString(5),result.getString(6),result.getString(7),result.getString(8),result.getInt(9),result.getInt(10),result.getString(11),result.getInt(12),result.getString(13),result.getString(14),result.getString(15)));
+ }
+ return resultList;
+ }catch(SQLException e){
+ System.out.println("Exception in PGSqlInput.search: "+e);
+ return new ArrayList<Result>();
+ }
+ */
+ }
+
+/*
+ * cuts Strings and returns an ArrayList of the cutted Strings
+ *
+ * @param str
+ * String to cut
+ * @return ArrayList<String>
+ * ArrayList with cutted Strings
+ */
+ private ArrayList <String> stringCut (String str){
+ int i=0,j=0;
+ ArrayList<String> list= new ArrayList<String>();
+ while(j!=-1){
+ j=str.indexOf(" ",i);
+ if (j!=-1){
+ list.add(new String (str.substring(i,j)));
+ i=j+1;
+ } else list.add(new String (str.substring(i,str.length())));
+ }
+ return list;
+ }
+
+/*
+ * returns number of medias in database
+ *
+ * @return String
+ * Number of medias in database
+ */
+ public void getNumOfMedias(IntHolder num, YalpErrorHolder err) {
+ try{
+ ResultSet result=this.stat.executeQuery("select count (\"id\") from \"medien\";");
+ result.next();
+ num = new IntHolder(new Integer(result.getString(1)));
+ }catch(SQLException e){
+ System.out.println("exception in PGSql Input getNumOfMedias: "+e);
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.ERROR_SQL;
+ error.level= YalpErrorLevel.ERROR_LEVEL_ERROR;
+ error.descr= e.toString();
+ err = new YalpErrorHolder(error);
+ }
+ }
+
+/*
+ * returns plugin information
+ * @param PluginInfoHolder info holder for PluginInformation
+ * @param YalpErrorHolder err holder for error information
+ */
+ public void getInfo(PluginInfoHolder info, YalpErrorHolder err)
+ {
+ info = new PluginInfoHolder(pluginInfo);
+ }
+}
diff --git a/src/YalpInputs/YalpPGSqlInput/YalpPGSqlInput.java b/src/YalpInputs/YalpPGSqlInput/YalpPGSqlInput.java
new file mode 100644
index 0000000..b816542
--- /dev/null
+++ b/src/YalpInputs/YalpPGSqlInput/YalpPGSqlInput.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpInputs.YalpPGSqlInput;
+
+import YalpInterfaces.*;
+
+/*
+ * Class YalpPGSqlInput
+ *
+ * <em>Implements functionality of the DBConnectionInterface</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 1 02-04-2006<br>
+ */
+public class YalpPGSqlInput {
+ private YalpInputInterfaceImpl con;
+ private DatabaseDefines config;
+
+ public static void main(String[] args)
+ {
+ System.out.println("YalpPGSqlInput\n");
+ PGSqlInput input = new PGSqlInput(args);
+ }
+}
diff --git a/src/YalpInputs/YalpPGSqlInput/db-design-backup.sql b/src/YalpInputs/YalpPGSqlInput/db-design-backup.sql
new file mode 100644
index 0000000..0ab8d4d
--- /dev/null
+++ b/src/YalpInputs/YalpPGSqlInput/db-design-backup.sql
@@ -0,0 +1,321 @@
+--
+-- PostgreSQL database dump
+--
+
+-- Started on 2008-09-23 20:48:41 CEST
+
+SET client_encoding = 'UNICODE';
+SET check_function_bodies = false;
+SET client_min_messages = warning;
+
+--
+-- TOC entry 1518 (class 0 OID 0)
+-- Dependencies: 5
+-- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres
+--
+
+COMMENT ON SCHEMA public IS 'Standard public schema';
+
+
+SET search_path = public, pg_catalog;
+
+SET default_tablespace = '';
+
+SET default_with_oids = false;
+
+--
+-- TOC entry 1170 (class 1259 OID 17306)
+-- Dependencies: 1491 5
+-- Name: IntProperties; Type: TABLE; Schema: public; Owner: yalp; Tablespace:
+--
+
+CREATE TABLE "IntProperties" (
+ id bigserial NOT NULL,
+ description "char",
+ value integer
+);
+
+
+ALTER TABLE public."IntProperties" OWNER TO yalp;
+
+--
+-- TOC entry 1520 (class 0 OID 0)
+-- Dependencies: 1169
+-- Name: IntProperties_id_seq; Type: SEQUENCE SET; Schema: public; Owner: yalp
+--
+
+SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('"IntProperties"', 'id'), 1, false);
+
+
+--
+-- TOC entry 1172 (class 1259 OID 17313)
+-- Dependencies: 1492 5
+-- Name: Medias; Type: TABLE; Schema: public; Owner: yalp; Tablespace:
+--
+
+CREATE TABLE "Medias" (
+ id bigserial NOT NULL,
+ "type" character(1),
+ path "char",
+ "fileName" "char",
+ tags "char"[],
+ duration "char"
+);
+
+
+ALTER TABLE public."Medias" OWNER TO yalp;
+
+--
+-- TOC entry 1521 (class 0 OID 0)
+-- Dependencies: 1171
+-- Name: Medias_id_seq; Type: SEQUENCE SET; Schema: public; Owner: yalp
+--
+
+SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('"Medias"', 'id'), 1, false);
+
+
+--
+-- TOC entry 1174 (class 1259 OID 17323)
+-- Dependencies: 1493 1494 1495 5
+-- Name: PropertyConnector; Type: TABLE; Schema: public; Owner: yalp; Tablespace:
+--
+
+CREATE TABLE "PropertyConnector" (
+ "mediaId" integer,
+ "stringPropertyId" integer DEFAULT 0,
+ "intPropertyId" integer DEFAULT 0,
+ id bigserial NOT NULL
+);
+
+
+ALTER TABLE public."PropertyConnector" OWNER TO yalp;
+
+--
+-- TOC entry 1168 (class 1259 OID 17294)
+-- Dependencies: 1490 5
+-- Name: StringProperties; Type: TABLE; Schema: public; Owner: yalp; Tablespace:
+--
+
+CREATE TABLE "StringProperties" (
+ id bigserial NOT NULL,
+ description "char",
+ value "char"
+);
+
+
+ALTER TABLE public."StringProperties" OWNER TO yalp;
+
+--
+-- TOC entry 1522 (class 0 OID 0)
+-- Dependencies: 1167
+-- Name: StringProperties_id_seq; Type: SEQUENCE SET; Schema: public; Owner: yalp
+--
+
+SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('"StringProperties"', 'id'), 1, false);
+
+
+--
+-- TOC entry 1165 (class 1259 OID 17269)
+-- Dependencies: 1488 1489 5
+-- Name: Users; Type: TABLE; Schema: public; Owner: yalp; Tablespace:
+--
+
+CREATE TABLE "Users" (
+ name "char"[] NOT NULL,
+ "realName" name[],
+ "level" integer DEFAULT 1 NOT NULL,
+ id bigserial NOT NULL
+);
+
+
+ALTER TABLE public."Users" OWNER TO yalp;
+
+--
+-- TOC entry 1523 (class 0 OID 0)
+-- Dependencies: 1166
+-- Name: Users_id_seq; Type: SEQUENCE SET; Schema: public; Owner: yalp
+--
+
+SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('"Users"', 'id'), 1, false);
+
+
+--
+-- TOC entry 1524 (class 0 OID 0)
+-- Dependencies: 1173
+-- Name: propertyConnector_id_seq; Type: SEQUENCE SET; Schema: public; Owner: yalp
+--
+
+SELECT pg_catalog.setval(pg_catalog.pg_get_serial_sequence('"PropertyConnector"', 'id'), 1, false);
+
+
+--
+-- TOC entry 1513 (class 0 OID 17306)
+-- Dependencies: 1170
+-- Data for Name: IntProperties; Type: TABLE DATA; Schema: public; Owner: yalp
+--
+
+COPY "IntProperties" (id, description, value) FROM stdin;
+\.
+
+
+--
+-- TOC entry 1514 (class 0 OID 17313)
+-- Dependencies: 1172
+-- Data for Name: Medias; Type: TABLE DATA; Schema: public; Owner: yalp
+--
+
+COPY "Medias" (id, "type", path, "fileName", tags, duration) FROM stdin;
+\.
+
+
+--
+-- TOC entry 1515 (class 0 OID 17323)
+-- Dependencies: 1174
+-- Data for Name: PropertyConnector; Type: TABLE DATA; Schema: public; Owner: yalp
+--
+
+COPY "PropertyConnector" ("mediaId", "stringPropertyId", "intPropertyId", id) FROM stdin;
+\.
+
+
+--
+-- TOC entry 1512 (class 0 OID 17294)
+-- Dependencies: 1168
+-- Data for Name: StringProperties; Type: TABLE DATA; Schema: public; Owner: yalp
+--
+
+COPY "StringProperties" (id, description, value) FROM stdin;
+\.
+
+
+--
+-- TOC entry 1511 (class 0 OID 17269)
+-- Dependencies: 1165
+-- Data for Name: Users; Type: TABLE DATA; Schema: public; Owner: yalp
+--
+
+COPY "Users" (name, "realName", "level", id) FROM stdin;
+\.
+
+
+--
+-- TOC entry 1507 (class 16386 OID 17329)
+-- Dependencies: 1174 1174
+-- Name: key_id_con; Type: CONSTRAINT; Schema: public; Owner: yalp; Tablespace:
+--
+
+ALTER TABLE ONLY "PropertyConnector"
+ ADD CONSTRAINT key_id_con PRIMARY KEY (id);
+
+
+ALTER INDEX public.key_id_con OWNER TO yalp;
+
+--
+-- TOC entry 1497 (class 16386 OID 17291)
+-- Dependencies: 1165 1165
+-- Name: key_is_id; Type: CONSTRAINT; Schema: public; Owner: yalp; Tablespace:
+--
+
+ALTER TABLE ONLY "Users"
+ ADD CONSTRAINT key_is_id PRIMARY KEY (id);
+
+
+ALTER INDEX public.key_is_id OWNER TO yalp;
+
+--
+-- TOC entry 1501 (class 16386 OID 17298)
+-- Dependencies: 1168 1168
+-- Name: prim_key_id; Type: CONSTRAINT; Schema: public; Owner: yalp; Tablespace:
+--
+
+ALTER TABLE ONLY "StringProperties"
+ ADD CONSTRAINT prim_key_id PRIMARY KEY (id);
+
+
+ALTER INDEX public.prim_key_id OWNER TO yalp;
+
+--
+-- TOC entry 1503 (class 16386 OID 17310)
+-- Dependencies: 1170 1170
+-- Name: prim_key_int_id; Type: CONSTRAINT; Schema: public; Owner: yalp; Tablespace:
+--
+
+ALTER TABLE ONLY "IntProperties"
+ ADD CONSTRAINT prim_key_int_id PRIMARY KEY (id);
+
+
+ALTER INDEX public.prim_key_int_id OWNER TO yalp;
+
+--
+-- TOC entry 1505 (class 16386 OID 17320)
+-- Dependencies: 1172 1172
+-- Name: prim_key_m_id; Type: CONSTRAINT; Schema: public; Owner: yalp; Tablespace:
+--
+
+ALTER TABLE ONLY "Medias"
+ ADD CONSTRAINT prim_key_m_id PRIMARY KEY (id);
+
+
+ALTER INDEX public.prim_key_m_id OWNER TO yalp;
+
+--
+-- TOC entry 1499 (class 16386 OID 17278)
+-- Dependencies: 1165 1165
+-- Name: user_name_unique; Type: CONSTRAINT; Schema: public; Owner: yalp; Tablespace:
+--
+
+ALTER TABLE ONLY "Users"
+ ADD CONSTRAINT user_name_unique UNIQUE (name);
+
+
+ALTER INDEX public.user_name_unique OWNER TO yalp;
+
+--
+-- TOC entry 1509 (class 16386 OID 17334)
+-- Dependencies: 1174 1170 1502
+-- Name: int_prop; Type: FK CONSTRAINT; Schema: public; Owner: yalp
+--
+
+ALTER TABLE ONLY "PropertyConnector"
+ ADD CONSTRAINT int_prop FOREIGN KEY ("intPropertyId") REFERENCES "IntProperties"(id);
+
+
+--
+-- TOC entry 1508 (class 16386 OID 17330)
+-- Dependencies: 1174 1172 1504
+-- Name: media_prop; Type: FK CONSTRAINT; Schema: public; Owner: yalp
+--
+
+ALTER TABLE ONLY "PropertyConnector"
+ ADD CONSTRAINT media_prop FOREIGN KEY ("mediaId") REFERENCES "Medias"(id);
+
+
+--
+-- TOC entry 1510 (class 16386 OID 17338)
+-- Dependencies: 1174 1168 1500
+-- Name: string_prop; Type: FK CONSTRAINT; Schema: public; Owner: yalp
+--
+
+ALTER TABLE ONLY "PropertyConnector"
+ ADD CONSTRAINT string_prop FOREIGN KEY ("stringPropertyId") REFERENCES "StringProperties"(id);
+
+
+--
+-- TOC entry 1519 (class 0 OID 0)
+-- Dependencies: 5
+-- Name: public; Type: ACL; Schema: -; Owner: postgres
+--
+
+REVOKE ALL ON SCHEMA public FROM PUBLIC;
+REVOKE ALL ON SCHEMA public FROM postgres;
+GRANT ALL ON SCHEMA public TO postgres;
+GRANT ALL ON SCHEMA public TO yalp;
+GRANT ALL ON SCHEMA public TO PUBLIC;
+
+
+-- Completed on 2008-09-23 20:48:41 CEST
+
+--
+-- PostgreSQL database dump complete
+--
+
diff --git a/src/YalpOutputs/YalpVlcTelnetOutput/TelnetInterface.java b/src/YalpOutputs/YalpVlcTelnetOutput/TelnetInterface.java
new file mode 100644
index 0000000..c8441ac
--- /dev/null
+++ b/src/YalpOutputs/YalpVlcTelnetOutput/TelnetInterface.java
@@ -0,0 +1,147 @@
+/***********************************************************************
+ *
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ *
+ ************************************************************************/
+
+package YalpOutputs.YalpVlcTelnetOutput;
+
+import java.net.Socket;
+import java.io.*;
+
+import org.apache.commons.net.telnet.*;
+
+/*******************************************************************************
+*
+* Class TelnetInterface
+*
+* <em>handels telnet connection</em>
+*
+* @author Volker Dahnke / Manuel Traut
+*
+* @version 0.1 20-11-2005<br>
+*
+* @see VlcStreamer
+*
+******************************************************************************/
+public class TelnetInterface {
+
+ private PrintStream out;
+ private InputStream in;
+ private TelnetClient tc = new TelnetClient();
+
+ /**
+ * creates socket, logs on
+ *
+ * @param host
+ * hostname of telnetserver
+ * @param port
+ * destination port
+ * @param pass
+ * password
+ *
+ */
+
+ public TelnetInterface(String host, int port, String pass){
+ try{
+ this.tc.connect(host,port);
+ this.out = new PrintStream(this.tc.getOutputStream());
+ this.in = this.tc.getInputStream();
+ } catch(IOException e){
+ System.out.println("server.TelnetInterface.java: Telnet connection "+host+":"+port+" failed");
+ return;
+ }
+
+ readUntil( "Password:" );
+ write(pass);
+ // Advance to a prompt
+ readUntil("> ");
+ }
+
+ /**
+ * write to TelnetInterface
+ * @param value
+ * String to write to Interface
+ */
+ public void write( String value ) {
+ try {
+ out.println( value );
+ out.flush();
+ System.out.println( value );
+ }
+ catch( Exception e ) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * reads output of telnet client
+ * @param pattern
+ * for stop reading
+ * @return String
+ */
+ public String readUntil( String pattern ) {
+ try {
+ char lastChar = pattern.charAt( pattern.length() - 1 );
+ StringBuffer sb = new StringBuffer();
+ char ch = ( char )in.read();
+ while( true ) {
+ System.out.print( ch );
+ sb.append( ch );
+ if( ch == lastChar ) {
+ if( sb.toString().endsWith( pattern ) ) {
+ return sb.toString();
+ }
+ }
+ ch = ( char )in.read();
+ }
+ }
+ catch( Exception e ) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * executes command
+ * @param cmd
+ * any telnet command
+ * @return String
+ * telnet output caused by the command
+ * null if failed
+ */
+ public String exec(String cmd){
+
+ try {
+ write(cmd);
+ return readUntil( "> " );
+ }
+ catch( Exception e ) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * close telnet connection
+ *
+ * @return boolean
+ * true: connection closed
+ * false: connection close failed
+ */
+
+ public boolean close(){
+ try {
+ this.tc.disconnect();
+ } catch(IOException e){
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/src/YalpOutputs/YalpVlcTelnetOutput/VlcStreamer.java b/src/YalpOutputs/YalpVlcTelnetOutput/VlcStreamer.java
new file mode 100644
index 0000000..568bfb8
--- /dev/null
+++ b/src/YalpOutputs/YalpVlcTelnetOutput/VlcStreamer.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpOutputs.YalpVlcTelnetOutput;
+
+import YalpInterfaces.*;
+
+import java.io.*;
+import java.util.LinkedList;
+
+import org.omg.CosNaming.*;
+import org.omg.CosNaming.NamingContextPackage.*;
+import org.omg.CORBA.*;
+import org.omg.PortableServer.*;
+import org.omg.PortableServer.POA;
+
+/*
+ *
+ * Class VlcStreamer
+ *
+ * <em>Controlling Streams on a high level</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 0.6 04-12-2005<br>
+ *
+ * @see InitServer
+ */
+public class VlcStreamer {
+
+ private static ORB orb;
+ private static POA poa;
+ private static YalpOutputPluginImpl streamer;
+ private static OutputPluginInterface outputPlugin;
+ private static ServerControlInterface srvCon;
+ private static PluginInfo pluginInfo;
+/*
+ * starts a vlc player in a new process
+ *
+ * @param serverIP
+ * where vlcStreamer is running
+ * @param startport
+ * first port used for streaming
+ * @param vlcCmd
+ * path and name of vlc player executable
+ * @param args
+ * from cmd line
+ */
+ public VlcStreamer(String serverIP, int startport, String vlcCmd,
+ String[] argv) {
+
+ pluginInfo = new PluginInfo();
+ pluginInfo.name = "VLC Telnet Streamer";
+ pluginInfo.description = "creates streams via VLC players telnet interface";
+ pluginInfo.type = PluginType.OUTPUT_PLUGIN;
+ pluginInfo.supportedTypes = new MediaType[0];
+ pluginInfo.access = new AccessInfo();
+ pluginInfo.access.name = "stream provided by vlc player";
+ pluginInfo.access.description = "streams can be displayed with vlc player";
+ pluginInfo.access.executable = "vlc";
+ pluginInfo.access.params = "";
+ pluginInfo.access.type = AccessType.STREAM;
+
+ try {
+ this.orb = ORB.init(argv, null);
+ org.omg.CORBA.Object objRef =
+ orb.resolve_initial_references("NameService");
+ NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
+ poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
+ } catch(Exception e) {
+ /* t.b.d. error handling */
+ System.out.println("couldn't host plugin implementation");
+ }
+
+ try {
+ poa.the_POAManager().activate();
+ } catch(org.omg.PortableServer.POAManagerPackage.AdapterInactive e) {
+ /* t.b.d. error handling */
+ System.out.println("poa inactive");
+ }
+/*
+ YalpError error = new YalpError();
+ error.msg = "";
+ error.descr = "";
+ error.code = YalpErrorCode.OK;
+ error.level= YalpErrorLevel.ERROR_LEVEL_INFO;
+ */
+ YalpErrorHolder err = new YalpErrorHolder(/*error*/);
+
+ try {
+ /* only start vlc player if it isn't currently running */
+ org.omg.CORBA.Object objRef =
+ orb.resolve_initial_references("NameService");
+
+ NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
+ String name = "YALP_Server";
+ srvCon = ServerControlInterfaceHelper.narrow(ncRef.resolve_str(name));
+ } catch (Exception e) {
+ System.out.println("Couldn't connect to YALP Server");
+ System.exit(0);
+ }
+
+ streamer = new YalpOutputPluginImpl();
+ streamer.setORB(orb);
+
+ try {
+ poa.activate_object(streamer);
+ org.omg.CORBA.Object ref = poa.servant_to_reference(streamer);
+ outputPlugin = OutputPluginInterfaceHelper.narrow(ref);
+
+ org.omg.CORBA.Object objRef =
+ orb.resolve_initial_references("NameService");
+
+ NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
+ String name = "YALP_Vlc_Telnet_Streamer_Output";
+ NameComponent path[] = ncRef.to_name(name);
+ ncRef.rebind(path, outputPlugin);
+
+ PluginInfoHolder tmp = new PluginInfoHolder(pluginInfo);
+ srvCon.ping(err);
+ System.out.println(err.value.descr);
+ srvCon.registerOutputPlugin(outputPlugin, tmp, err );
+ pluginInfo = tmp.value;
+
+ if(err.value.code != YalpErrorCode.OK)
+ System.out.println("registring outputplugin failed");
+ else
+ System.out.println("output plugin registered");
+
+ orb.run();
+
+ } catch (Exception e) {
+ System.out.println("binding plugin failed 1");
+ e.printStackTrace();
+ System.exit(0);
+ }
+ }
+}
diff --git a/src/YalpOutputs/YalpVlcTelnetOutput/YalpOutputPluginImpl.java b/src/YalpOutputs/YalpVlcTelnetOutput/YalpOutputPluginImpl.java
new file mode 100644
index 0000000..50bdaa4
--- /dev/null
+++ b/src/YalpOutputs/YalpVlcTelnetOutput/YalpOutputPluginImpl.java
@@ -0,0 +1,371 @@
+/*
+ * Copyright (c) 2008 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut
+ */
+
+package YalpOutputs.YalpVlcTelnetOutput;
+
+import YalpInterfaces.*;
+
+import org.omg.CosNaming.*;
+import org.omg.CosNaming.NamingContextPackage.*;
+import org.omg.CORBA.*;
+
+import java.util.*;
+import java.io.IOException;
+
+/*
+ * Class YalpOutputPluginImpl
+ *
+ * <em>Implements VLC Telnet Streamer as YALP Plugin</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ * @version 0.7 10-09-2008
+ */
+public class YalpOutputPluginImpl extends OutputPluginInterfacePOA {
+
+ private ORB orb;
+ private static Process vlcPlayer = null;
+ private StreamCounter streamCounter= new StreamCounter();
+ private LinkedList<Output> currentStreams = new LinkedList<Output>();
+ private int startPort;
+ private String hostIP;
+ private String vlcCommand;
+ private ServerControlInterface srvCon;
+ private PluginInfo pluginInfo;
+
+/*
+ * starts a vlc player in a new process
+ *
+ * @param serverIP
+ * where vlcStreamer is running
+ * @param startport
+ * first port used for streaming
+ * @param vlcCmd
+ * path and name of vlc player executable
+ *
+ * @throws RemoteException
+ * @throws ClassNotFoundException
+ */
+ public void setORB(ORB _orb) {
+ orb = _orb;
+
+ pluginInfo = new PluginInfo();
+ pluginInfo.name = "VLC Telnet Streamer";
+ pluginInfo.description = "creates streams via VLC players telnet interface";
+ pluginInfo.type = PluginType.OUTPUT_PLUGIN;
+ pluginInfo.access = new AccessInfo();
+ pluginInfo.access.name = "stream provided by vlc player";
+ pluginInfo.access.description = "streams can be displayed with vlc player";
+ pluginInfo.access.executable = "vlc";
+ pluginInfo.access.params = "";
+ pluginInfo.access.type = AccessType.STREAM;
+
+ /* t.b.d. read vlccmod, startport, hostip from config xml */
+ String vlcCmd = "/usr/bin/vlc";
+ vlcCommand = vlcCmd + " --reset-config -I telnet";
+ startPort = 9000;
+ hostIP = "127.0.0.1";
+
+ if(vlcPlayer == null){
+ try{
+ vlcPlayer = Runtime.getRuntime().exec(this.vlcCommand);
+ } catch(IOException e){
+ System.out.println("server.VlcStreamer.java: Streamingserver failed");
+ }
+ }
+ }
+
+ public void shutdown() {
+ /* t.b.d. */
+ }
+
+/*
+ * controls Streaming (start, stop, etc)
+ *
+ * @param howtoStream
+ * specifies streaming options
+ */
+ public void control(OutputHolder howtoStream, YalpErrorHolder err) {
+
+ switch( howtoStream.value.outputAction.value() ) {
+
+ case Action._START:
+ start(howtoStream.value);
+ break;
+
+ case Action._STOP:
+ stop(howtoStream.value);
+ break;
+
+ case Action._PAUSE:
+ pause(howtoStream.value);
+ break;
+
+ case Action._PLAY:
+ play(howtoStream.value);
+ break;
+
+ case Action._FORWARD:
+ next(howtoStream.value);
+ break;
+
+ //add sth. to current playing stream
+ case Action._CREATE:
+ add(howtoStream.value);
+ break;
+
+ default:
+ System.out.println("server.VlcStreamer.control: action not supported");
+ break;
+ }
+ }
+
+/*
+ * get plugin infos
+ *
+ * @param PluginInfoHolder (out)
+ * @param YalpErrorHolder (out)
+ */
+ public void getInfo(PluginInfoHolder info, YalpErrorHolder err)
+ {
+ info = new PluginInfoHolder();
+ err = new YalpErrorHolder();
+ err.value.code = YalpErrorCode.OK;
+ info.value = pluginInfo;
+ }
+
+/*
+ * request Streaming of submitted Output
+ *
+ * @param stream
+ * which should be streamed
+ * @return Output
+ * extends Information "how to receive" of submitted Output
+ */
+ public Output request(Output stream) {
+ //stream.setIP(hostIP); for UDP
+ stream.info.name = streamName();
+ stream.info.params = new Integer(++startPort).toString();
+ currentStreams.add(stream);
+ return stream;
+ }
+
+
+ /**
+ * starts streaming of submitted streamInfo
+ * @param howtoStream
+ */
+ private void start(Output howtoStream){
+ /*
+ String newString, setup2;
+ this.streamCounter.actualStreams++;
+ this.streamCounter.allStreams++;
+
+ switch (howtoStream.info.type.value()){
+ case AccessType._VOD:
+ newString = "new "+howtoStream.info.name+" vod enabled";
+ break;
+ case AccessType._BROADCAST:
+ newString = "new "+howtoStream.info.name+" broadcast enabled";
+ break;
+ default:
+ newString ="";
+ System.out.println("server.VlcStreamer.start: unsupported Type");
+ break;
+ }
+
+ String comp = "#transcode{vcodec=mp2v,vb=1024,scale=1,acodec=mpga,ab=192,channels=2}:duplicate{dst=";
+
+ setup2 = "setup "+howtoStream.info.name+" output "+comp+"std{";
+
+ switch (howtoStream.access_type.value()){
+ case Access._STREAM:
+ setup2 += "access=http,";
+ break;
+ case Access._UDP:
+ setup2 += "access=udp,";
+ break;
+ default:
+ System.out.println("server.VlcStreamer.start: unsupported Accesstype");
+ break;
+ }
+
+ switch (howtoStream.mux_type.value()){
+ case Mux._TS:
+ setup2 += "mux=ts,url="+howtoStream.ip+":"+howtoStream.port+"}";
+ break;
+ case Mux._ES:
+ setup2 += "mux=es,url="+howtoStream.ip+":"+howtoStream.port+"}";
+ break;
+ case Mux._OGG:
+ setup2 += "mux=ogg,url="+howtoStream.ip+":"+howtoStream.port+"}";
+ break;
+ default:
+ System.out.println("server.VlcStreamer.start: unsupported Muxer");
+ break;
+ }
+
+ // DEBUG COMP
+ setup2 += "}";
+
+ String control = "control "+howtoStream.info.name+" play";
+
+ // telnet connection
+ TelnetInterface telnet = new TelnetInterface(hostIP, 4212, "admin");
+
+ // execute telnet commands
+ telnet.exec(newString);
+
+ // Playlist
+ String input = "";
+ for(int i=0; i < howtoStream.list.length; i++){
+ input = "setup "+howtoStream.info.name+" ";
+ String fileItem = howtoStream.list[i];
+ fileItem.replace(" ", "\\ ");
+ input += fileItem;
+ telnet.exec(input);
+ }
+
+ telnet.exec(setup2);
+ telnet.exec(control);
+
+ // close telnet connection
+ telnet.close();
+ */
+ }
+
+ /**
+ * plays submitted streamInfo
+ * @param howtoStream
+ */
+ private void play(Output howtoStream){
+
+ String control = "control "+howtoStream.info.name+" play";
+
+ // telnet connection
+ TelnetInterface telnet = new TelnetInterface(hostIP, 4212, "admin");
+
+ telnet.exec(control);
+
+ // close telnet connection
+ telnet.close();
+ }
+
+ /**
+ * pause submitted streamInfo
+ * @param howtoStream
+ */
+ private void pause(Output howtoStream){
+
+ String control = "control "+howtoStream.info.name+" pause";
+
+ // DEBUG
+ System.out.println("client.VlcStreamer: Telnetcmd: ");
+ System.out.println(control);
+
+ // telnet connection
+ TelnetInterface telnet = new TelnetInterface(hostIP, 4212, "admin");
+
+ telnet.exec(control);
+
+ // close telnet connection
+ telnet.close();
+ }
+
+ /**
+ * go to next file in playlist
+ *
+ * @param howtoStream
+ */
+ private void next(Output howtoStream){
+
+ String control = "control "+howtoStream.info.name+" seek 100";
+
+ // DEBUG
+ System.out.println("client.VlcStreamer: Telnetcmd: ");
+ System.out.println(control);
+
+ // telnet connection
+ TelnetInterface telnet = new TelnetInterface(hostIP, 4212, "admin");
+
+ telnet.exec(control);
+
+ // close telnet connection
+ telnet.close();
+ }
+
+ /**
+ * stop streaming, delete stream
+ *
+ * @param howtoStream
+ */
+ private void stop(Output howtoStream){
+
+ String del = "del "+howtoStream.info.name;
+ this.streamCounter.actualStreams--;
+
+ // telnet connection
+ TelnetInterface telnet = new TelnetInterface(hostIP, 4212, "admin");
+
+ telnet.exec(del);
+
+ // close telnet connection
+ telnet.close();
+
+ currentStreams.remove(howtoStream);
+ }
+
+ /**
+ * register Stream at vlcPlayer
+ * @param howtoStream
+ */
+ private void add(Output howtoStream){
+
+ String input = "";
+
+ // telnet connection
+ TelnetInterface telnet = new TelnetInterface(hostIP, 4212, "admin");
+
+ for(int i=0; i < howtoStream.playlist.length; i++){
+ input += "setup "+howtoStream.info.name+" ";
+ input += howtoStream.playlist[i];
+ telnet.exec(input);
+ input = "";
+ }
+ telnet.close();
+ }
+
+ /**
+ * calculates streamName
+ * @return String streamName
+ */
+
+ private String streamName(){
+ String streamName = "stream";
+ streamName += streamCounter.allStreams;
+ return streamName;
+ }
+
+ /**
+ * stops the streaming server
+ *
+ */
+
+ public void quit(){
+ vlcPlayer.destroy();
+ }
+
+ /**
+ * returns the streamcounter
+ * @return StreamCounter
+ */
+ public StreamCounter getStreamCounter(){
+ return this.streamCounter;
+ }
+}
diff --git a/src/YalpOutputs/YalpVlcTelnetOutput/YalpVlcTelnetOutput.java b/src/YalpOutputs/YalpVlcTelnetOutput/YalpVlcTelnetOutput.java
new file mode 100644
index 0000000..766936d
--- /dev/null
+++ b/src/YalpOutputs/YalpVlcTelnetOutput/YalpVlcTelnetOutput.java
@@ -0,0 +1,20 @@
+package YalpOutputs.YalpVlcTelnetOutput;
+
+import YalpInterfaces.*;
+
+public class YalpVlcTelnetOutput {
+
+ public static void main(String[] args) {
+
+ try {
+ System.setProperty("java.security.policy","output.policy");
+ }
+ catch (Exception e) {//DEBUG
+ System.out.println ("Output SecurityManager File not found" + e);
+ System.exit(0);
+ }
+
+ VlcStreamer vlc = new VlcStreamer("localhost", 2501, "/usr/bin/vlc", args);
+ System.out.println("VlcTelnetOutput");
+ }
+}
diff --git a/src/YalpServer/FileBrowser.java b/src/YalpServer/FileBrowser.java
new file mode 100755
index 0000000..2f2a3a5
--- /dev/null
+++ b/src/YalpServer/FileBrowser.java
@@ -0,0 +1,175 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpServer;
+
+import java.util.ArrayList;
+import java.io.File;
+import java.io.Serializable;
+
+import YalpInterfaces.*;
+
+/*
+ * Class FileBrowser
+ *
+ * <em>each Admin Client has his own FileBrowser, to browse through the
+ * subDirectories of the as startDir defined Directory</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 0.6 14-12-2005<br>
+ *
+ * @see client.GUI.Browser
+ */
+
+public class FileBrowser {
+
+ private File actualFile, startDir;
+ private String owner;
+ private String userName;
+ private ArrayList<YalpFile> fileList;
+
+ /* t.b.d. add some more types */
+ private String[] extensions = {".mp3",".mpg",".mpeg",".avi"};
+
+/*
+ * Constructor starts Browsing in startDir
+ *
+ * @param startdir
+ * directory which could be browser recursively
+ * @param owner
+ * of the Browser (IP of the Client)
+ * @param userName
+ * of the Admin using this browser
+ */
+
+ public FileBrowser(String startdir, String owner,String userName) {
+ this.owner = owner;
+ this.userName=userName;
+ this.actualFile = new File(startdir);
+ this.startDir = new File(startdir);
+ this.fileList = new ArrayList<YalpFile>();
+ }
+
+/*
+ * returns owner of the browser
+ *
+ * @return String
+ * owner
+ */
+
+ public String getOwner(){
+ return this.owner;
+ }
+
+/*
+ * returns user of the browser
+ *
+ * @return String
+ * user
+ */
+
+ public String getUserName(){
+ return this.userName;
+ }
+
+/*
+ * returns list of all files in actual Folder
+ * (none recursive)
+ *
+ * @return ArrayList<YalpFile>
+ * list of all files
+ */
+
+ public ArrayList<YalpFile> getFiles(){
+ return this.fileList;
+ }
+
+/*
+ * returns list of all files in actual Folder
+ * (recursive)
+ *
+ * @return ArrayList<YalpFile>
+ * list of all files
+ */
+
+ public ArrayList<File> findAll() {
+
+ System.out.println( "server.FileBrowser.findAll: lookin in - " +
+ this.actualFile.toString() );
+
+ FileFinder ff = new FileFinder(actualFile.getPath(), extensions);
+ return ff.getFiles();
+ }
+
+/*
+ * change actual Folder
+ *
+ * @param dirName
+ * String dir to change to
+ */
+
+ public void changeDir(String dirName) {
+
+ this.actualFile = new File(this.startDir+dirName);
+ this.fileList.clear();
+
+ if(actualFile.isDirectory()) {
+ for ( File aFile : this.actualFile.listFiles() ) {
+ /* add to fileList if extension is allowed or File is a Directory */
+ if (match(aFile.getName(), extensions) || aFile.isDirectory())
+ {
+ YalpFile tmp = new YalpFile();
+ tmp.name = aFile.getName();
+ tmp.isDir = aFile.isDirectory();
+ tmp.parent = aFile.getParent();
+ this.fileList.add( tmp );
+ }
+ }
+ }
+ }
+
+/*
+ * prints current directory out to console
+ *
+ * (for debugging)
+ */
+
+ public void printActualDir(){
+ for(YalpFile one : this.fileList){
+ if(one.isDir) System.out.print("+");
+ else System.out.print("|");
+ System.out.println(one.name);
+ }
+ }
+
+/*
+ * checks if file extension matches or not
+ *
+ * @param s
+ * fileName including Extension
+ * @param suffixes
+ * Array of allowed Extensions
+ * @return boolean
+ * true if yalp can handle this extension, else false
+ */
+
+ private static boolean match( String s, String suffixes[] ) {
+ for ( String suffix : suffixes ) {
+ int huhu = s.length();
+ int huhu2 = suffix.length();
+ int huhu3 = huhu - huhu2;
+ if ( s.length() >= suffix.length() &&
+ s.substring( huhu3, s.length()).equalsIgnoreCase(suffix) )
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/src/YalpServer/FileFinder.java b/src/YalpServer/FileFinder.java
new file mode 100755
index 0000000..2d6527c
--- /dev/null
+++ b/src/YalpServer/FileFinder.java
@@ -0,0 +1,110 @@
+/***********************************************************************
+ *
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ *
+ ***********************************************************************/
+package YalpServer;
+
+import java.io.*;
+import java.util.*;
+
+/************************************************************************
+ *
+ * Class FileFinder
+ *
+ * <em>algorithm for scanning files recursively</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 0.6 14-12-2005<br>
+ *
+ * @see FileBrowser
+ *
+ ************************************************************************/
+
+public class FileFinder
+{
+ private ArrayList<File> files;
+
+ /**
+ * Constructor: scans subdirectories of commited directory
+ * uses only files with allowed extensions
+ * @param start
+ * directory to scan
+ * @param extensions
+ * allowed extensions
+ */
+ public FileFinder( String start, String extensions[] ) {
+
+ this.files = new ArrayList<File>();
+ Stack<File> dirs = new Stack<File>();
+ File startdir = new File(start);
+
+ // push startdir to stack
+ if (startdir.isDirectory()) dirs.push(startdir);
+ // startdir is File
+ else {
+ if (match(startdir.getName(), extensions)) this.files.add(startdir);
+ return;
+ }
+ // for each dir on stack
+ while (dirs.size() > 0) {
+ // contents of dir on stack
+ for (File file : dirs.pop().listFiles()){
+ try {
+ // add subdirectory to stack
+ if (file.isDirectory()) dirs.push(file);
+ // if file is of correct filetype add it to filelist
+ else if (match(file.getName(), extensions)) this.files.add(file);
+ } catch (NullPointerException e) {
+ System.out.println("FileFinder: "+ file.getName() +"Premission denied");
+ }
+ }
+ }
+ }
+
+ /**
+ * returns and prints out all Medias found
+ * @return ArrayList<File>
+ * all found Medias
+ */
+ public ArrayList<File> getFiles(){
+ print();
+ return this.files;
+ }
+
+ /**
+ * prints out found medias
+ *
+ */
+ public void print() {
+ System.out.println( "Found " + files.size() + " file" + (files.size() == 1 ? "." : "s.") );
+ for ( File f : files ) System.out.println( f.getAbsolutePath() );
+ }
+
+ /**
+ * checks if file extension matches or not
+ *
+ * @param s
+ * file to check
+ * @param suffixes
+ * allowed extensions
+ *
+ * @return boolean: true if it's a media, yalp can handle
+ */
+ private static boolean match( String s, String suffixes[] ) {
+ for ( String suffix : suffixes ) {
+ int huhu = s.length();
+ int huhu2 = suffix.length();
+ int huhu3 = huhu - huhu2;
+ if ( s.length() >= suffix.length() && s.substring(huhu3, s.length()).equalsIgnoreCase(suffix) ) return true;
+ }
+ return false;
+ }
+}
diff --git a/src/YalpServer/FileInfoManager.java b/src/YalpServer/FileInfoManager.java
new file mode 100755
index 0000000..34fe49b
--- /dev/null
+++ b/src/YalpServer/FileInfoManager.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpServer;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.FileNotFoundException;
+
+import de.hampelratte.id3.*;
+
+import YalpInterfaces.*;
+
+/*
+ * Class FileInfoManager
+ *
+ * <em>Creates a Result out of FileInformations (ID3, etc)</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 0.1 14-12-2005<br>
+ *
+ * @see ServerControl
+ */
+
+public class FileInfoManager {
+
+ private Media fileInfo;
+ private EncodingType eType;
+
+/*
+ * Constructor: tries to get all Informations about a file
+ *
+ * @param file
+ */
+
+ public FileInfoManager(File file) {
+
+ this.eType = EncodingType.UNKNOWN;
+ this.fileInfo = new Media();
+ this.fileInfo.path = file.getParent()+file.separator;
+ this.fileInfo.fileName = file.getName();
+
+ /* check extensions is mp3 */
+ if( this.fileInfo.fileName.substring( this.fileInfo.fileName.length() - 3,
+ this.fileInfo.fileName.length()).equalsIgnoreCase( "mp3" ) )
+ {
+ this.eType = EncodingType.MP3;
+ }
+
+ switch(this.eType.value()) {
+ case EncodingType._MP3:
+ try
+ {
+ /* opening mp3 file for reading and writing */
+ MP3File mp3 = new de.hampelratte.id3.MP3File(file.toString(), "r");
+ this.fileInfo.type = MediaType.SOUND;
+
+ if(mp3.hasID3v1Tag){
+ ID3v1Tag tag = mp3.readID3v1Tag();
+ /* t.b.d. create StringProperties
+ this.fileInfo.album = tag.getAlbum();
+ this.fileInfo.author = tag.getArtist();
+ this.fileInfo.category = tag.getGenre();
+ this.fileInfo.name = tag.getTrack() +" - "+tag.getTitle();
+ this.fileInfo.year = tag.getYear();
+ */
+ }
+
+ if(mp3.hasID3v2Tag){
+
+ // reading the ID3v2Tag
+ ID3v2Tag tag = mp3.readID3v2Tag();
+ /* t.b.d. create StringProperties
+ this.fileInfo.album = tag.getAlbum();
+ this.fileInfo.author = tag.getArtist();
+ this.fileInfo.category = tag.getGenre();
+ this.fileInfo.year = tag.getYear();
+ */
+ if( !(tag.getTrack().equals(""))){
+ this.fileInfo.name = tag.getTrack() +" - "+tag.getTitle();
+ } else {
+ this.fileInfo.name = tag.getTitle();
+ }
+ }
+
+ if (this.fileInfo.name.equals("")) {
+
+ this.fileInfo.name =
+ file.getName().substring( 0, file.getName().length() - 4 );
+ }
+
+ mp3.close();
+ } catch (Exception e) {
+
+ this.fileInfo.name =
+ file.getName().substring(0,file.getName().length() - 4);
+ }
+ break;
+
+ default:
+ this.fileInfo.name =
+ file.getName().substring(0,file.getName().length()-4);
+
+ this.fileInfo.type = MediaType.VIDEO;
+ break;
+ }
+ }
+
+/*
+ * returns the information to an media, found
+ * @return MediaChange
+ * Informations about the media
+ */
+
+ public Media getInfo(){
+ return this.fileInfo;
+ }
+}
diff --git a/src/YalpServer/InitServer.java b/src/YalpServer/InitServer.java
new file mode 100755
index 0000000..ac9d507
--- /dev/null
+++ b/src/YalpServer/InitServer.java
@@ -0,0 +1,283 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ *
+ */
+
+package YalpServer;
+
+import java.net.Inet4Address;
+import java.net.MalformedURLException;
+import java.net.UnknownHostException;
+
+import java.beans.XMLDecoder;
+import java.beans.XMLEncoder;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.File;
+
+import java.util.ArrayList;
+import java.util.Properties;
+
+import java.security.*;
+
+import java.sql.SQLException;
+
+import org.omg.CosNaming.*;
+import org.omg.CosNaming.NamingContextPackage.*;
+import org.omg.CORBA.*;
+import org.omg.PortableServer.*;
+import org.omg.PortableServer.POA;
+
+import YalpInterfaces.*;
+
+/*
+ * Class InitServer
+ *
+ * <em>Establishes DBConnection and creates VlcStreamer waits for
+ * further Instructions via Interfaces</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 0.1 20-11-2005<br>
+ *
+ * @see Server
+ *
+ */
+
+public class InitServer {
+
+ private ServerSettings settings = new ServerSettings();
+ private ServerControlImpl srvCon;
+ private ServerControlInterface srv;
+ private ORB orb;
+ private String[] orbArgs;
+ private POA poa;
+ private String serverIP;
+ private ArrayList<FileBrowser> browseList;
+
+ /*
+ * Constructor: starts Server initialization
+ */
+ public InitServer(String[] _orbArgs) {
+
+ loadConfig("ServerSettings.xml");
+ writeConfig("ServerSettings.xml");
+
+ this.browseList = new ArrayList<FileBrowser>();
+
+ this.orbArgs = _orbArgs; // t.b.d. read orbargs from config xml
+
+ try {
+ this.serverIP = Inet4Address.getLocalHost().getHostAddress();
+ } catch(UnknownHostException e) {
+ /* t.b.d. error handling */
+ System.out.println("couldn't resolve hostname");
+ }
+
+ /* bind ServerControl to ORB and NamingService */
+ this.orb = ORB.init(orbArgs, null);
+
+ try {
+ this.poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
+ } catch(org.omg.CORBA.ORBPackage.InvalidName e) {
+ /* t.b.d. error handling */
+ System.out.println("couldn't get name ref of root poa");
+ }
+
+ try {
+ poa.the_POAManager().activate();
+ } catch(org.omg.PortableServer.POAManagerPackage.AdapterInactive e) {
+ /* t.b.d. error handling */
+ System.out.println("poa inactive");
+ }
+
+ this.srvCon = new ServerControlImpl();
+ this.srvCon.setORB(this.orb);
+
+ try {
+ org.omg.CORBA.Object ref = poa.servant_to_reference(this.srvCon);
+ this.srv = ServerControlInterfaceHelper.narrow(ref);
+
+ org.omg.CORBA.Object objRef =
+ orb.resolve_initial_references("NameService");
+
+ NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
+ String name = "YALP_Server";
+ NameComponent path[] = ncRef.to_name(name);
+ ncRef.rebind(path, this.srv);
+
+ System.out.println("YALP Server ready");
+ this.orb.run();
+
+ } catch( org.omg.CosNaming.NamingContextPackage.InvalidName e) {
+ /* t.b.d. error handling */
+ System.out.println("couldn't narrow ref to path");
+ } catch( org.omg.CosNaming.NamingContextPackage.NotFound e) {
+ /* t.b.d. error handling */
+ System.out.println("naming context not found, couldn't bind server ctl");
+ } catch(org.omg.PortableServer.POAPackage.ServantNotActive e) {
+ /* t.b.d. error handling */
+ System.out.println("couldn't get name ref of root poa");
+ } catch (org.omg.CORBA.ORBPackage.InvalidName e) {
+ /* t.b.d. error handling */
+ System.out.println("couldn't get NameService");
+ } catch (org.omg.PortableServer.POAPackage.WrongPolicy e) {
+ /* t.b.d. error handling */
+ System.out.println("policies not set correctly");
+ } catch (org.omg.CosNaming.NamingContextPackage.CannotProceed e) {
+ /* t.b.d. error handling */
+ System.out.println("rebind failed, cannot proceed");
+ }
+ }
+
+/*
+ * write Configuration to XML File
+ *
+ * @param fileName
+ * where to write the configuration file
+ * @return boolean
+ * false - if failed
+ */
+
+ public boolean writeConfig(String fileName) {
+ try{
+ FileOutputStream configFile = new FileOutputStream(fileName);
+ XMLEncoder configWriter = new XMLEncoder(configFile);
+ configWriter.writeObject(settings.imageDir);
+ configWriter.writeObject(settings.videoDir);
+ configWriter.writeObject(settings.soundDir);
+ configWriter.close();
+ } catch (FileNotFoundException fnfe){
+ return false;
+ }
+ return true;
+ }
+
+/*
+ * tries to load ServerSettings from XML File
+ * @param fileName
+ * Configuration file
+ * @return boolean
+ * false - if loading failed
+ */
+
+ public boolean loadConfig(String fileName) {
+ try{
+ FileInputStream configFile = new FileInputStream(fileName);
+ XMLDecoder configLoader = new XMLDecoder(configFile);
+ settings.imageDir = (String)configLoader.readObject();
+ settings.videoDir = (String)configLoader.readObject();
+ settings.soundDir = (String)configLoader.readObject();
+ configLoader.close();
+ } catch(FileNotFoundException fnfe) {
+ System.out.println("Configuration not found, loading defaults...");
+ return false;
+ } catch(ClassCastException cce) {
+ System.out.println("Errors in Configuration, loading defaults...");
+ return false;
+ }
+ return true;
+ }
+
+/*
+ * returns actual configuration of the server
+ * @return ServerSettings
+ * actual configuration
+ */
+
+ public ServerSettings getConfig() {
+ return this.settings;
+ }
+
+/*
+ * sets and saves a new ServerConfiguration
+ *
+ * @param set
+ * new ServerSettings
+ * @return boolean
+ * true if succesfully saved
+ */
+
+ public boolean setConfig(ServerSettings set){
+ this.settings = set;
+ return this.writeConfig("ServerConfiguration.xml");
+ }
+
+/*
+ * t.b.d. session management
+ *
+ * Client logon (give him,his fileBrowser)
+ *
+ * @param ipAdress
+ * of the Client
+ * @param userName
+ * using the Client
+ *
+
+ public void newClient(String ipAdress,String userName) {
+ this.browseList.add( new FileBrowser( this.settings.startDir,
+ ipAdress,
+ userName ) );
+ }
+ */
+
+/*
+ * Client logoff (free memory of his fileBrowser
+ *
+ * @param ipAdress
+ * of the Client
+ * @param userName
+ * using the Client
+ */
+
+ public void remClient(String ipAdress, String userName) {
+ for( FileBrowser aBrowser : this.browseList ) {
+ if( aBrowser.getOwner().equals(ipAdress) &&
+ aBrowser.getUserName().equals(userName) ) {
+ this.browseList.remove(aBrowser);
+ break;
+ }
+ }
+ }
+
+/*
+ * change Directory in fileBrowser
+ *
+ * @param ip
+ * of the Client
+ * @param dir
+ * to which should be changed
+ * @return ArrayList<YalpFile>
+ * content of the directory changed to
+ */
+
+ public ArrayList<YalpFile> changeDir(String ip, String dir) {
+ FileBrowser aBrowser = null;
+ for(FileBrowser oneMoreBrowser : this.browseList) {
+ if( oneMoreBrowser.getOwner().equals(ip) ) {
+ oneMoreBrowser.changeDir(dir);
+ aBrowser = oneMoreBrowser;
+ break;
+ }
+ }
+ return aBrowser.getFiles();
+ }
+
+/*
+ * Server Shutdown
+ */
+
+ public void serverShutdown() {
+ System.out.println("Server shutdown - Server is going down");
+ System.exit(0);
+ }
+}
diff --git a/src/YalpServer/ServerControlImpl.java b/src/YalpServer/ServerControlImpl.java
new file mode 100755
index 0000000..a88445a
--- /dev/null
+++ b/src/YalpServer/ServerControlImpl.java
@@ -0,0 +1,385 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpServer;
+
+import YalpInterfaces.*;
+
+import java.net.*;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Properties;
+
+import org.omg.CosNaming.*;
+import org.omg.CosNaming.NamingContextPackage.*;
+import org.omg.CORBA.*;
+import org.omg.PortableServer.*;
+import org.omg.PortableServer.POA;
+
+import org.apache.log4j.Logger;
+import org.apache.log4j.PropertyConfigurator;
+
+/*
+ * Class ServerControlImpl
+ *
+ * <em>Implements functionality of the ServerControl Interface</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ * @version 0.6 14-12-2005<br>
+ * @see client
+ */
+public class ServerControlImpl extends ServerControlInterfacePOA {
+
+ private ORB orb;
+ private InitServer srv;
+ private String log4jFile = "log4j_server.conf";
+ private static Logger logger = Logger.getLogger("Yalp.Server");
+
+public ServerControlImpl() {
+ PropertyConfigurator.configureAndWatch(log4jFile);
+ logger.debug("ServerControlImpl()");
+}
+
+ public void setORB(ORB _orb) {
+ logger.debug("setOrb()");
+ orb = _orb;
+ }
+
+ public void init(InitServer srv) {
+ logger.debug("init()");
+ this.srv=srv;
+ }
+
+/*
+ * client logon
+ *
+ * @param userName
+ * @param password
+ * @param ipAdress
+ * @param session (out)
+ * @param error (out)
+ */
+ public void clientLogon( String userName,
+ String password,
+ String ipAdress,
+ SessionHolder session,
+ YalpErrorHolder err )
+ {
+ logger.debug("clientLogon()");
+ /* t.b.d. session managmnet */
+ try {
+ System.out.println("logon: "+userName+" - "+ipAdress);
+
+ session.value = new Session();
+ session.value.id = 666;
+ session.value.me = new YalpUser();
+ session.value.me.level = AccessRights.ADMIN;
+
+ err.value = new YalpError();
+ err.value.code = YalpErrorCode.OK;
+
+ } catch (Exception e) {
+ System.out.println(e.toString());
+ }
+ System.out.println("t.b.d. clientLogon nothing implemented at the moment");
+ }
+
+/*
+ * client logoff
+ *
+ * @param session
+ * @param error (out)
+ */
+ public void clientLogoff( Session bye, YalpErrorHolder err) {
+ logger.debug("clientLogoff");
+ srv.remClient( bye.ip, bye.me.name );
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * get user list
+ *
+ * @param user list (out)
+ * @param error (out)
+ */
+ public void getUser(UsersHolder list, YalpErrorHolder err) {
+ logger.debug("getUser()");
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * change user details
+ *
+ * @param user
+ * @param password
+ * @param action (create, delete, alter)
+ * @param error (out)
+ */
+ public void changeUser(YalpUser usr, String passwd, Action todo,
+ YalpErrorHolder err) {
+ logger.debug("changeUser()");
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * alter media informations
+ *
+ * @param media to change
+ * @param action (update, delete, create)
+ * @param error (out)
+ */
+ public void changeMedia( Media toChange, Action todo, YalpErrorHolder err ) {
+ logger.debug("changeMedia()");
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * count yalp medias
+ *
+ * @param num (out)
+ * @param error (out)
+ */
+ public void getNumOfMedias( IntHolder num, YalpErrorHolder err ) {
+ logger.debug("getNumOfMedias()");
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * control yalp medias
+ *
+ * @param control description (inout)
+ * @param error (out)
+ */
+ public void control( OutputHolder ctlOutput, YalpErrorHolder err ) {
+ logger.debug("control()");
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * search yalp media
+ *
+ * @param search string
+ * @param list of mediatypes
+ * @param result as list of medias (out)
+ */
+ public void search( String str, MediaType[] types, MediasHolder result,
+ YalpErrorHolder err ) {
+ logger.debug("search()");
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * register new output plugin
+ *
+ * @param plugin which should be registered
+ * @param error
+ */
+ public void registerOutputPlugin( OutputPluginInterface itf,
+ PluginInfoHolder info, YalpErrorHolder err )
+ {
+ logger.debug("registerOutputPlugin()");
+ /* t.b.d. itf handling */
+ System.out.println("registering output plugin: " + info.value.name );
+ YalpError error = new YalpError();
+ error.msg = "huhu";
+ error.descr = "hihi";
+ error.code = YalpErrorCode.OK;
+ error.level = YalpErrorLevel.ERROR_LEVEL_INFO;
+ err.value = error;
+ PluginInfo inf = new PluginInfo();
+ inf.id = 666;
+ inf.name = info.value.name;
+ inf.description = info.value.description;
+ inf.type = info.value.type;
+ inf.supportedTypes= info.value.supportedTypes;
+ inf.access = info.value.access;
+ inf.maxClients = info.value.maxClients;
+ inf.actClients = info.value.actClients;
+ info.value = inf;
+ }
+
+/*
+ * remove output plugin
+ *
+ * @param plugin which should be registered
+ * @param error
+ */
+ public void removeOutputPlugin( PluginInfo itf, YalpErrorHolder err )
+ {
+ logger.debug("removeOutputPlugin()");
+ /* t.b.d. itf handling */
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * get all registered output plugins
+ *
+ * @param plugin list
+ * @param error
+ */
+ public void getOutputPlugins( PluginInfosHolder itfs, String name,
+ YalpErrorHolder err )
+ {
+ logger.debug("getOutputPlugins()");
+ /* t.b.d. itf handling */
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * register new input plugin
+ *
+ * @param plugin which should be registered
+ * @param error
+ */
+ public void registerInputPlugin( org.omg.CORBA.Object itf,
+ PluginInfoHolder info, YalpErrorHolder err )
+ {
+ logger.debug("registerInputPlugins()");
+ /* t.b.d. itf handling */
+ System.out.println("registering input plugin: " + info.value.name );
+ YalpError error = new YalpError();
+ error.msg = "huhu";
+ error.descr = "hihi";
+ error.code = YalpErrorCode.OK;
+ error.level = YalpErrorLevel.ERROR_LEVEL_INFO;
+ err.value = error;
+ PluginInfo inf = new PluginInfo();
+ inf.id = 666;
+ inf.name = info.value.name;
+ inf.description = info.value.description;
+ inf.type = info.value.type;
+ inf.supportedTypes= info.value.supportedTypes;
+ inf.access = info.value.access;
+ inf.maxClients = info.value.maxClients;
+ inf.actClients = info.value.actClients;
+ info.value = inf; }
+
+/*
+ * remove input plugin
+ *
+ * @param plugin which should be registered
+ * @param error
+ */
+ public void removeInputPlugin( PluginInfo itf, YalpErrorHolder err )
+ {
+ logger.debug("removeInputPlugin()");
+ /* t.b.d. itf handling */
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * get all registered input plugins
+ *
+ * @param plugin list
+ * @param error
+ */
+ public void getInputPlugins( PluginInfosHolder itfs,
+ String name, YalpErrorHolder err )
+ {
+ logger.debug("getInputPlugins()");
+ /* t.b.d. itf handling */
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * register new auth plugin
+ *
+ * @param plugin which should be registered
+ * @param error
+ */
+ public void registerAuthPlugin( org.omg.CORBA.Object itf,
+ PluginInfoHolder info, YalpErrorHolder err )
+ {
+ logger.debug("registerAuthPlugin()");
+ /* t.b.d. itf handling */
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * remove input plugin
+ *
+ * @param plugin which should be registered
+ * @param error
+ */
+ public void removeAuthPlugin( PluginInfo itf,
+ YalpErrorHolder err )
+ {
+ logger.debug("removeAuthPlugin()");
+ /* t.b.d. itf handling */
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * get all registered auth plugins
+ *
+ * @param plugin list
+ * @param error
+ */
+ public void getAuthPlugins( PluginInfosHolder itfs,
+ String name, YalpErrorHolder err )
+ {
+ logger.debug("getAuthPlugins()");
+ /* t.b.d. itf handling */
+ YalpError error = new YalpError();
+ error.code = YalpErrorCode.OK;
+ err = new YalpErrorHolder(error);
+ }
+
+/*
+ * to check if server is still ok
+ *
+ * @return Boolean true - if ok
+ */
+ public void ping(YalpErrorHolder pong) {
+ logger.debug("ping()");
+ YalpError err = new YalpError();
+ err.descr = "PONG";
+ err.msg = "huhu";
+ err.level = YalpErrorLevel.ERROR_LEVEL_INFO;
+ err.code = YalpErrorCode.OK;
+ pong.value = err;
+ System.out.println("pong");
+ }
+
+/*
+ * server shutdown
+ */
+ public void serverShutdown()
+ {
+ logger.debug("server shutdown()");
+ /* t.b.d. clear server shutdown */
+ }
+}
diff --git a/src/YalpServer/ServerSettings.java b/src/YalpServer/ServerSettings.java
new file mode 100755
index 0000000..313e875
--- /dev/null
+++ b/src/YalpServer/ServerSettings.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+
+package YalpServer;
+
+/*
+ * Class ServerSettings
+ *
+ * <em></em>
+ *
+ * @author Manuel Traut
+ *
+ * @version 0.1 27-03-2006<br>
+ *
+ * @see server.InitServer
+ */
+
+public class ServerSettings{
+
+ static final long serialVersionUID = 0;
+
+ public String imageDir = "/media/image";
+ public String videoDir = "/media/video";
+ public String soundDir = "/media/sound";
+
+ /**
+ * set Directories which contains media Files
+ * @param startDir
+ */
+ public void setImageDir(String startDir){
+ this.imageDir = startDir;
+ }
+
+ /**
+ * set Directories which contains media Files
+ * @param startDir
+ */
+ public void setVideoDir(String startDir){
+ this.videoDir = startDir;
+ }
+
+ /**
+ * set Directories which contains media Files
+ * @param startDir
+ */
+ public void setSoundDir(String startDir){
+ this.soundDir = startDir;
+ }
+
+ public String getVideoDir(){
+ return this.videoDir;
+ }
+
+ public String getImageDir(){
+ return this.imageDir;
+ }
+
+ public String getSoundDir(){
+ return this.soundDir;
+ }
+}
diff --git a/src/YalpServer/YalpServer.java b/src/YalpServer/YalpServer.java
new file mode 100755
index 0000000..0ddbe00
--- /dev/null
+++ b/src/YalpServer/YalpServer.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2006 Manuel Traut and Volker Dahnke
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors: Manuel Traut and Volker Dahnke
+ */
+package YalpServer;
+
+/*
+ * Class Server
+ *
+ * <em>static main method</em>
+ *
+ * @author Volker Dahnke / Manuel Traut
+ *
+ * @version 0.1 20-11-2005<br>
+ */
+public class YalpServer{
+
+/*
+ * starts Server initialization
+ *
+ * @param argv
+ * arguments which are not used
+ */
+ public static void main (String[] argv) {
+ try{
+ System.setProperty("java.security.policy","server.policy");
+ } catch (Exception e) {//DEBUG
+ System.out.println ("Server SecurityManagerExeptions not caught jet " + e);
+ System.exit(0);
+ }
+ InitServer yalpServer = new InitServer(argv);
+ return;
+ }
+
+}
diff --git a/src/yalp.idl b/src/yalp.idl
new file mode 100644
index 0000000..6fb5203
--- /dev/null
+++ b/src/yalp.idl
@@ -0,0 +1,265 @@
+module YalpInterfaces
+{
+
+enum YalpErrorCode {
+ OK,
+ ERROR_SQL,
+ ERROR_UNDEFINED
+};
+
+enum YalpErrorLevel {
+ ERROR_LEVEL_DEBUG,
+ ERROR_LEVEL_INFO,
+ ERROR_LEVEL_ERROR,
+ ERROR_LEVEL_CRITICAL
+};
+
+struct YalpError {
+ string msg;
+ YalpErrorCode code;
+ YalpErrorLevel level;
+ string descr;
+};
+
+struct YalpFile {
+ boolean isDir;
+ string name;
+ string parent;
+};
+typedef sequence<YalpFile> YalpFiles;
+
+struct StreamCounter {
+ unsigned long actualStreams;
+ unsigned long allStreams;
+};
+
+enum AccessRights {
+ ADMIN,
+ USER,
+ NO_YALP_SERVER,
+ DENY
+};
+
+struct YalpUser {
+ unsigned long id;
+ string name;
+ string realName;
+ AccessRights level;
+};
+typedef sequence<YalpUser> Users;
+
+enum MediaType {
+ IMAGE,
+ VIDEO,
+ SOUND,
+ OTHER
+};
+typedef sequence<MediaType> MediaTypes;
+
+struct StringProperty {
+ string property;
+ string value;
+};
+typedef sequence<StringProperty> StringProperties;
+
+struct IntProperty {
+ string property;
+ long value;
+};
+typedef sequence<IntProperty> IntProperties;
+
+typedef sequence<string> MediaTags;
+
+struct Media {
+ /* mandatory */
+ string name;
+ unsigned long id;
+ MediaType type;
+ unsigned long inputPluginId;
+ /* optional */
+ YalpUser owner;
+ string lastEdit;
+ string path;
+ string fileName;
+ string duration;
+ StringProperties stringProps;
+ IntProperties intProps;
+ MediaTags tags;
+};
+typedef sequence<Media> Medias;
+
+enum Action {
+ START,
+ PLAY,
+ PAUSE,
+ STOP,
+ FORWARD,
+ BACKWARD,
+ CREATE,
+ EDIT,
+ DELETE
+};
+typedef sequence<Action> Actions;
+
+enum AccessType {
+ FILE,
+ FILES,
+ STREAM
+};
+
+enum EncodingType {
+ UNKNOWN,
+ MP3,
+ MPG,
+ MPEG,
+ AVI,
+ MOV,
+ M2T,
+ JPEG,
+ JPG,
+ TIFF
+};
+
+struct AccessInfo {
+ string name;
+ string description;
+ string executable;
+ string params;
+ AccessType type;
+};
+
+struct Output {
+ unsigned long id;
+ AccessInfo info;
+ Medias playlist;
+ Action outputAction;
+ string destIp;
+};
+
+enum PluginType {
+ INPUT_PLUGIN,
+ OUTPUT_PLUGIN,
+ AUTH_PLUGIN
+};
+
+struct PluginInfo {
+ /* mandatory */
+ unsigned long id;
+ string name;
+ string description;
+ PluginType type;
+ /* optional */
+ MediaTypes supportedTypes;
+ AccessInfo access;
+ unsigned short maxClients;
+ unsigned short actClients;
+};
+typedef sequence<PluginInfo> PluginInfos;
+
+struct Session {
+ unsigned long id;
+ YalpUser me;
+ string ip;
+ PluginInfos availablePlugins;
+};
+
+/* YALP startup
+ *
+ * 1) CORBA - NameService
+ * 2) YALP - ServerControl (connects to Db via NameService)
+ * 4) YALP - all Plugins (connecting to ServerControl via NS)
+ * 5) YALP - Clients (connecting to ServerControl via NS, getting handles)
+ * (to available OutputPlugins via ServerControl )
+ */
+
+/* implemented by OutputPlugins */
+interface OutputPluginInterface {
+ void getInfo(out PluginInfo info, out YalpError err);
+ void control(inout Output ctlOutput, out YalpError err);
+ oneway void shutdown();
+};
+
+/* implemented by InputPlugins */
+interface InputPluginInterface {
+ void getInfo(out PluginInfo info, out YalpError err);
+ void changeMedia(in Media toChange, in Action todo, out YalpError err);
+
+ void search(in string str, in MediaTypes types, out Medias result,
+ out YalpError err);
+
+ void getNumOfMedias(out unsigned long num, out YalpError err);
+};
+
+/* implemented by UserIdentificationPlugin */
+interface UserIdentificationInterface {
+ void getInfo(out PluginInfo info, out YalpError err);
+ void userVerify(in string user, in string passwd, out YalpError err,
+ out YalpUser acc);
+
+ void getUser(out Users list, out YalpError err);
+
+ void changeUser(in YalpUser usr, in string passwd, in Action todo,
+ out YalpError err);
+};
+
+/* implemented by YALP */
+interface ServerControlInterface {
+
+/* User Handling */
+
+ void clientLogon(in string userName, in string pass, in string ipAdress,
+ out Session hej, out YalpError err);
+
+ void clientLogoff(in Session bye, out YalpError err);
+
+ void getUser(out Users list, out YalpError err);
+
+ void changeUser(in YalpUser usr, in string passwd, in Action todo,
+ out YalpError err);
+
+/* Media Handling */
+
+ void changeMedia(in Media toChange, in Action todo, out YalpError err);
+ void getNumOfMedias(out unsigned long num, out YalpError err);
+ void control(inout Output ctlOutput, out YalpError err);
+
+ void search(in string str, in MediaTypes types, out Medias result,
+ out YalpError err);
+
+
+/* Outputplugin Handling */
+
+ void registerOutputPlugin(in OutputPluginInterface itf, inout PluginInfo info,
+ out YalpError err);
+
+ void removeOutputPlugin(in PluginInfo itf, out YalpError err);
+
+ void getOutputPlugins(out PluginInfos itfs, in string name,
+ out YalpError err);
+
+
+/* Inputplugin Handling */
+
+ void registerInputPlugin(in Object itf, inout PluginInfo info,
+ out YalpError err);
+
+ void removeInputPlugin(in PluginInfo itf, out YalpError err);
+
+ void getInputPlugins(out PluginInfos itfs, in string name,
+ out YalpError err);
+
+
+/* Identificationplugin Handling */
+
+ void registerAuthPlugin(in Object itf, inout PluginInfo info,
+ out YalpError err);
+
+ void removeAuthPlugin(in PluginInfo itf, out YalpError err);
+ void getAuthPlugins(out PluginInfos itfs, in string name, out YalpError err);
+
+ /* Server related */
+ void ping(out YalpError pong);
+ oneway void serverShutdown();
+};
+
+};