diff --git a/MEMBER.md b/MEMBER.md new file mode 100644 index 00000000..16aa1cb9 --- /dev/null +++ b/MEMBER.md @@ -0,0 +1,3 @@ +13510015 Wilson_Fonda wilsonfonda@gmail.com wilsonfonda +13510059 Yulianti_Oenang 13510059@std.stei.itb.ac.id YuliantiOenang +13510073 Kevin_Winata kevinwinata@gmail.com kevinwinata \ No newline at end of file diff --git a/Server/build.xml b/Server/build.xml new file mode 100644 index 00000000..fa80ae64 --- /dev/null +++ b/Server/build.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + Builds, tests, and runs the project Server. + + + diff --git a/Server/build/built-jar.properties b/Server/build/built-jar.properties new file mode 100644 index 00000000..1f29b94a --- /dev/null +++ b/Server/build/built-jar.properties @@ -0,0 +1,4 @@ +#Tue, 21 May 2013 08:58:12 +0700 + + +C\:\\Users\\Yulianti\ Oenang\\Desktop\\Tubes\ 5\ Final\\Server= diff --git a/Server/build/classes/model/Tugas.class b/Server/build/classes/model/Tugas.class new file mode 100644 index 00000000..b6e425aa Binary files /dev/null and b/Server/build/classes/model/Tugas.class differ diff --git a/Server/build/classes/server/DbOperation.class b/Server/build/classes/server/DbOperation.class new file mode 100644 index 00000000..8866ab6b Binary files /dev/null and b/Server/build/classes/server/DbOperation.class differ diff --git a/Server/build/classes/server/Server.class b/Server/build/classes/server/Server.class new file mode 100644 index 00000000..23b0239b Binary files /dev/null and b/Server/build/classes/server/Server.class differ diff --git a/Server/dist/README.TXT b/Server/dist/README.TXT new file mode 100644 index 00000000..29a24d32 --- /dev/null +++ b/Server/dist/README.TXT @@ -0,0 +1,32 @@ +======================== +BUILD OUTPUT DESCRIPTION +======================== + +When you build an Java application project that has a main class, the IDE +automatically copies all of the JAR +files on the projects classpath to your projects dist/lib folder. The IDE +also adds each of the JAR files to the Class-Path element in the application +JAR files manifest file (MANIFEST.MF). + +To run the project from the command line, go to the dist folder and +type the following: + +java -jar "Server.jar" + +To distribute this project, zip up the dist folder (including the lib folder) +and distribute the ZIP file. + +Notes: + +* If two JAR files on the project classpath have the same name, only the first +JAR file is copied to the lib folder. +* Only JAR files are copied to the lib folder. +If the classpath contains other types of files or folders, these files (folders) +are not copied. +* If a library on the projects classpath also has a Class-Path element +specified in the manifest,the content of the Class-Path element has to be on +the projects runtime path. +* To set a main class in a standard Java project, right-click the project node +in the Projects window and choose Properties. Then click Run and enter the +class name in the Main Class field. Alternatively, you can manually type the +class name in the manifest Main-Class element. diff --git a/Server/dist/Server.jar b/Server/dist/Server.jar new file mode 100644 index 00000000..8bbcf410 Binary files /dev/null and b/Server/dist/Server.jar differ diff --git a/Server/dist/lib/mysql-connector-java-5.1.13-bin.jar b/Server/dist/lib/mysql-connector-java-5.1.13-bin.jar new file mode 100644 index 00000000..795c6985 Binary files /dev/null and b/Server/dist/lib/mysql-connector-java-5.1.13-bin.jar differ diff --git a/Server/manifest.mf b/Server/manifest.mf new file mode 100644 index 00000000..328e8e5b --- /dev/null +++ b/Server/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/Server/nbproject/build-impl.xml b/Server/nbproject/build-impl.xml new file mode 100644 index 00000000..0d9a3c5d --- /dev/null +++ b/Server/nbproject/build-impl.xml @@ -0,0 +1,1053 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + + + + + + java -cp "${run.classpath.with.dist.jar}" ${main.class} + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + Must select one file in the IDE or set profile.class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Server/nbproject/genfiles.properties b/Server/nbproject/genfiles.properties new file mode 100644 index 00000000..1b8de5c8 --- /dev/null +++ b/Server/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=6f248d50 +build.xml.script.CRC32=5a7fa1ba +build.xml.stylesheet.CRC32=28e38971@1.44.1.45 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=6f248d50 +nbproject/build-impl.xml.script.CRC32=ca045364 +nbproject/build-impl.xml.stylesheet.CRC32=fcddb364@1.50.2.46 diff --git a/Server/nbproject/private/private.properties b/Server/nbproject/private/private.properties new file mode 100644 index 00000000..5e2ea25f --- /dev/null +++ b/Server/nbproject/private/private.properties @@ -0,0 +1,2 @@ +compile.on.save=true +user.properties.file=C:\\Users\\Yulianti Oenang\\.netbeans\\7.0\\build.properties diff --git a/Server/nbproject/private/private.xml b/Server/nbproject/private/private.xml new file mode 100644 index 00000000..c1f155a7 --- /dev/null +++ b/Server/nbproject/private/private.xml @@ -0,0 +1,4 @@ + + + + diff --git a/Server/nbproject/project.properties b/Server/nbproject/project.properties new file mode 100644 index 00000000..a961e6e1 --- /dev/null +++ b/Server/nbproject/project.properties @@ -0,0 +1,72 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/Server.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +includes=** +jar.compress=false +javac.classpath=\ + ${libs.MySQLDriver.classpath} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.6 +javac.target=1.6 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=server.Server +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/Server/nbproject/project.xml b/Server/nbproject/project.xml new file mode 100644 index 00000000..61113d04 --- /dev/null +++ b/Server/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + Server + + + + + + + + + diff --git a/Server/src/model/Tugas.java b/Server/src/model/Tugas.java new file mode 100644 index 00000000..bdec45e0 --- /dev/null +++ b/Server/src/model/Tugas.java @@ -0,0 +1,134 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package model; + +import java.util.Date; + +/** + * + * @author TOSHIBA + */ +public class Tugas implements java.io.Serializable { + private int id; + private String nama; + private Date deadline; + private String kategori; + private String assignee; + private String tag; + private boolean status; + private long last_mod; + + /** + * @return the id + */ + public int getId() { + return id; + } + + /** + * @param id the id to set + */ + public void setId(int id) { + this.id = id; + } + + /** + * @return the nama + */ + public String getNama() { + return nama; + } + + /** + * @param nama the nama to set + */ + public void setNama(String nama) { + this.nama = nama; + } + + /** + * @return the deadline + */ + public Date getDeadline() { + return deadline; + } + + /** + * @param deadline the deadline to set + */ + public void setDeadline(Date deadline) { + this.deadline = deadline; + } + + /** + * @return the kategori + */ + public String getKategori() { + return kategori; + } + + /** + * @param kategori the kategori to set + */ + public void setKategori(String kategori) { + this.kategori = kategori; + } + + /** + * @return the assignee + */ + public String getAssignee() { + return assignee; + } + + /** + * @param assignee the assignee to set + */ + public void setAssignee(String assignee) { + this.assignee = assignee; + } + + /** + * @return the tag + */ + public String getTag() { + return tag; + } + + /** + * @param tag the tag to set + */ + public void setTag(String tag) { + this.tag = tag; + } + + /** + * @return the status + */ + public boolean isStatus() { + return status; + } + + /** + * @param status the status to set + */ + public void setStatus(boolean status) { + this.status = status; + } + + /** + * @return the last_mod + */ + public long getLast_mod() { + return last_mod; + } + + /** + * @param last_mod the last_mod to set + */ + public void setLast_mod(long last_mod) { + this.last_mod = last_mod; + } +} diff --git a/Server/src/server/DbOperation.java b/Server/src/server/DbOperation.java new file mode 100644 index 00000000..9a56e524 --- /dev/null +++ b/Server/src/server/DbOperation.java @@ -0,0 +1,171 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package server; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import model.Tugas; + +/** + * + * @author TOSHIBA + */ +public class DbOperation { + + private Connection connection; + + public DbOperation() { + try { + Properties prop = new Properties(); + Class.forName("com.mysql.jdbc.Driver"); + connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/progin_147_13510059", "progin", "progin"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + public boolean checkLogin(String username, String password) { + boolean ret = false; + try { + PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM users WHERE username=? and password=MD5(?)"); + preparedStatement.setString(1, username); + preparedStatement.setString(2, password); + ResultSet rs = preparedStatement.executeQuery(); + ret = rs.first(); + } catch (SQLException e) { + e.printStackTrace(); + } + return ret; + } + + public List getTugas(String username) { + List tasks = new ArrayList(); + try { + PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM tugas WHERE pemilik=?"); + preparedStatement.setString(1, username); + ResultSet rs = preparedStatement.executeQuery(); + + while (rs.next()) { + Tugas tugas = new Tugas(); + String id = rs.getString("id"); + + tugas.setId(Integer.parseInt(id)); + tugas.setNama(rs.getString("nama")); + tugas.setDeadline(rs.getDate("tgl_deadline")); + tugas.setLast_mod(rs.getLong("last_mod")); + tugas.setStatus(rs.getBoolean("status")); + + PreparedStatement tempStatement = connection.prepareStatement("SELECT nama FROM categories WHERE id=?"); + tempStatement.setString(1, rs.getString("id_kategori")); + ResultSet temp = tempStatement.executeQuery(); + temp.next(); + tugas.setKategori(temp.getString("nama")); + + PreparedStatement tempStatement1 = connection.prepareStatement("SELECT username FROM assignees WHERE id_tugas=?"); + tempStatement1.setString(1, id); + ResultSet temp1 = tempStatement1.executeQuery(); + StringBuilder assignee = new StringBuilder(); + while (temp1.next()) { + assignee.append(temp1.getString("username")); + if (!temp1.isLast()) + assignee.append(", "); + } + tugas.setAssignee(assignee.toString()); + + PreparedStatement tempStatement2 = connection.prepareStatement("SELECT tag FROM tags WHERE id_tugas=?"); + tempStatement2.setString(1, id); + ResultSet temp2 = tempStatement2.executeQuery(); + StringBuilder tag = new StringBuilder(); + while (temp2.next()) { + tag.append(temp2.getString("tag")); + if (!temp2.isLast()) + tag.append(", "); + } + tugas.setTag(tag.toString()); + tasks.add(tugas); + } + + PreparedStatement preparedStatement1 = connection.prepareStatement("SELECT tugas.* FROM tugas, assignees WHERE tugas.id = assignees.id_tugas AND assignees.username = ?"); + preparedStatement1.setString(1, username); + ResultSet rs1 = preparedStatement1.executeQuery(); + + while (rs1.next()) { + Tugas tugas = new Tugas(); + String id = rs1.getString("id"); + + tugas.setId(Integer.parseInt(id)); + tugas.setNama(rs1.getString("nama")); + tugas.setDeadline(rs1.getDate("tgl_deadline")); + tugas.setLast_mod(rs1.getLong("last_mod")); + tugas.setStatus(rs1.getBoolean("status")); + + PreparedStatement tempStatement = connection.prepareStatement("SELECT nama FROM categories WHERE id=?"); + tempStatement.setString(1, rs1.getString("id_kategori")); + ResultSet temp = tempStatement.executeQuery(); + temp.next(); + tugas.setKategori(temp.getString("nama")); + + PreparedStatement tempStatement1 = connection.prepareStatement("SELECT username FROM assignees WHERE id_tugas=?"); + tempStatement1.setString(1, id); + ResultSet temp1 = tempStatement1.executeQuery(); + StringBuilder assignee = new StringBuilder(); + assignee.append(rs1.getString("pemilik")).append(", "); + while (temp1.next()) { + assignee.append(temp1.getString("username")); + if (!temp1.isLast()) + assignee.append(", "); + } + tugas.setAssignee(assignee.toString()); + + PreparedStatement tempStatement2 = connection.prepareStatement("SELECT tag FROM tags WHERE id_tugas=?"); + tempStatement2.setString(1, id); + ResultSet temp2 = tempStatement2.executeQuery(); + StringBuilder tag = new StringBuilder(); + while (temp2.next()) { + tag.append(temp2.getString("tag")); + if (!temp2.isLast()) + tag.append(", "); + } + tugas.setTag(tag.toString()); + tasks.add(tugas); + } + } catch (SQLException e) { + e.printStackTrace(); + } + return tasks; + } + + public void Update(int id, boolean status, long time) { + try { + PreparedStatement tempStatement = connection.prepareStatement("SELECT last_mod FROM tugas WHERE id=?"); + tempStatement.setInt(1, id); + ResultSet temp = tempStatement.executeQuery(); + temp.next(); + + if (temp.getLong("last_mod") < time) { + int stat = 0; + if (status) stat = 1; + PreparedStatement preparedStatement = connection.prepareStatement("UPDATE tugas SET STATUS = ?, last_mod = ? WHERE id =?"); + // Parameters start with 1 + preparedStatement.setInt(1, stat); + preparedStatement.setLong(2, time); + preparedStatement.setInt(3, id); + preparedStatement.executeUpdate(); + } + + } catch (SQLException e) { + e.printStackTrace(); + } + } +} diff --git a/Server/src/server/Server.java b/Server/src/server/Server.java new file mode 100644 index 00000000..248ace51 --- /dev/null +++ b/Server/src/server/Server.java @@ -0,0 +1,95 @@ +package server; + +import java.io.*; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketTimeoutException; +import java.util.List; +import model.Tugas; + +public class Server extends Thread { + + private ServerSocket serverSocket; + private int port = 6066; + private static DbOperation db; + + public Server() throws IOException { + serverSocket = new ServerSocket(port); + } + + public byte[] serialize(Object obj) throws IOException { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + ObjectOutputStream o = new ObjectOutputStream(b); + o.writeObject(obj); + return b.toByteArray(); + } + + public Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException { + ByteArrayInputStream b = new ByteArrayInputStream(bytes); + ObjectInputStream o = new ObjectInputStream(b); + return o.readObject(); + } + + @Override + public void run() { + while (true) { + try { + System.out.println("Waiting for client on port " + + serverSocket.getLocalPort() + "..."); + Socket server = serverSocket.accept(); + System.out.println("Just connected to " + + server.getRemoteSocketAddress()); + DataInputStream in = + new DataInputStream(server.getInputStream()); + + DataOutputStream out = + new DataOutputStream(server.getOutputStream()); + + String request = in.readUTF(); + String[] split = request.split("#"); + if (split[0].compareTo("login") == 0) { + if (db.checkLogin(split[1], split[2])) { + out.writeUTF("true#"+System.currentTimeMillis()); + } + else { + out.writeUTF("false"); + } + } + else if (split[0].compareTo("sync") == 0) { + List tasks = db.getTugas(split[1]); + out.flush(); + out.writeInt(serialize(tasks).length); + out.flush(); + for (int i = 0; i < tasks.size(); i++) { + System.out.println(i); + System.out.println(tasks.get(i).getId() + tasks.get(i).getNama() + tasks.get(i).getDeadline().toString() + tasks.get(i).isStatus() + tasks.get(i).getLast_mod() + tasks.get(i).getKategori() + tasks.get(i).getAssignee() + tasks.get(i).getTag()); + } + out.write(serialize(tasks),0,serialize(tasks).length); + System.out.print(serialize(tasks).length); + } + else if (split[0].compareTo("update") == 0) { + db.Update(Integer.parseInt(split[1]), Boolean.parseBoolean(split[2]), Long.parseLong(split[3], 10)); + System.out.println("update"); + } + + server.close(); + } catch (IOException e) { + + } + } + } + + public static void main(String[] args) { +// DbOperation db = new DbOperation(); +// List tasks = db.getTugas("felixt"); +// for(int i = 0; i < tasks.size(); i++) +// System.out.println(tasks.get(i).getId()+tasks.get(i).getNama()+tasks.get(i).getKategori()+tasks.get(i).getAssignee()+tasks.get(i).getTag()); + db = new DbOperation(); + try { + Thread t = new Server(); + t.start(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/Tubes5-Progin/build.xml b/Tubes5-Progin/build.xml new file mode 100644 index 00000000..4a1d7f6a --- /dev/null +++ b/Tubes5-Progin/build.xml @@ -0,0 +1,65 @@ + + Builds, tests, and runs the project Tubes5-Progin. + + + diff --git a/Tubes5-Progin/build/built-jar.properties b/Tubes5-Progin/build/built-jar.properties new file mode 100644 index 00000000..52dec92e --- /dev/null +++ b/Tubes5-Progin/build/built-jar.properties @@ -0,0 +1,4 @@ +#Mon, 20 May 2013 14:56:08 +0700 + + +C\:\\Users\\User\\Documents\\NetBeansProjects\\Tubes\ 5\\Tubes5-Progin= diff --git a/Tubes5-Progin/build/classes/META-INF/services/org.jdesktop.application.Application b/Tubes5-Progin/build/classes/META-INF/services/org.jdesktop.application.Application new file mode 100644 index 00000000..e944b982 --- /dev/null +++ b/Tubes5-Progin/build/classes/META-INF/services/org.jdesktop.application.Application @@ -0,0 +1 @@ +tubes5progin.Tubes5ProginApp \ No newline at end of file diff --git a/Tubes5-Progin/build/classes/client/Client.class b/Tubes5-Progin/build/classes/client/Client.class new file mode 100644 index 00000000..7095c633 Binary files /dev/null and b/Tubes5-Progin/build/classes/client/Client.class differ diff --git a/Tubes5-Progin/build/classes/model/Tugas.class b/Tubes5-Progin/build/classes/model/Tugas.class new file mode 100644 index 00000000..32330259 Binary files /dev/null and b/Tubes5-Progin/build/classes/model/Tugas.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/TableCellListener.class b/Tubes5-Progin/build/classes/tubes5progin/TableCellListener.class new file mode 100644 index 00000000..c71276de Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/TableCellListener.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/TableCellLongTextRenderer.class b/Tubes5-Progin/build/classes/tubes5progin/TableCellLongTextRenderer.class new file mode 100644 index 00000000..1a4db0ca Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/TableCellLongTextRenderer.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginAboutBox.class b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginAboutBox.class new file mode 100644 index 00000000..7d029c15 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginAboutBox.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginApp.class b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginApp.class new file mode 100644 index 00000000..8ddb3133 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginApp.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$1.class b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$1.class new file mode 100644 index 00000000..d6add8b3 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$1.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$2.class b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$2.class new file mode 100644 index 00000000..3fe71922 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$2.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$3.class b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$3.class new file mode 100644 index 00000000..6445a8ba Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$3.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$4.class b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$4.class new file mode 100644 index 00000000..4caafdc2 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$4.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$5.class b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$5.class new file mode 100644 index 00000000..7c9052f0 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$5.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$6.class b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$6.class new file mode 100644 index 00000000..e02551f0 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$6.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$7.class b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$7.class new file mode 100644 index 00000000..d5bb23b8 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$7.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$8.class b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$8.class new file mode 100644 index 00000000..d0f44b82 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$8.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$9.class b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$9.class new file mode 100644 index 00000000..65291b6a Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView$9.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView.class b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView.class new file mode 100644 index 00000000..847c91d7 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/Tubes5ProginView.class differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/Alert.properties b/Tubes5-Progin/build/classes/tubes5progin/resources/Alert.properties new file mode 100644 index 00000000..0f7bac8b --- /dev/null +++ b/Tubes5-Progin/build/classes/tubes5progin/resources/Alert.properties @@ -0,0 +1,3 @@ +jLabel1.text=Username +jLabel2.text=Password +jButton1.text=Ok diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/HalamanUtama.properties b/Tubes5-Progin/build/classes/tubes5progin/resources/HalamanUtama.properties new file mode 100644 index 00000000..448e8a38 --- /dev/null +++ b/Tubes5-Progin/build/classes/tubes5progin/resources/HalamanUtama.properties @@ -0,0 +1,16 @@ +# To change this template, choose Tools | Templates +# and open the template in the editor. + +editMenu.text=Edit +cutMenuItem.text=Cut +helpMenu.text=Help +deleteMenuItem.text=Delete +pasteMenuItem.text=Paste +copyMenuItem.text=Copy +saveMenuItem.text=Save +contentsMenuItem.text=Contents +saveAsMenuItem.text=Save As ... +aboutMenuItem.text=About +fileMenu.text=File +openMenuItem.text=Open +exitMenuItem.text=Exit diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/Main.properties b/Tubes5-Progin/build/classes/tubes5progin/resources/Main.properties new file mode 100644 index 00000000..2cdc95c0 --- /dev/null +++ b/Tubes5-Progin/build/classes/tubes5progin/resources/Main.properties @@ -0,0 +1,2 @@ + +jTable1.columnModel.title0=Nama Tugas diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/Tubes5ProginAboutBox.properties b/Tubes5-Progin/build/classes/tubes5progin/resources/Tubes5ProginAboutBox.properties new file mode 100644 index 00000000..b76ddd5f --- /dev/null +++ b/Tubes5-Progin/build/classes/tubes5progin/resources/Tubes5ProginAboutBox.properties @@ -0,0 +1,14 @@ +title = About: ${Application.title} ${Application.version} + +closeAboutBox.Action.text = &Close + +appDescLabel.text=${Application.description} + +versionLabel.text=Product Version\: + +vendorLabel.text=Vendor\: + +homepageLabel.text=Homepage\: + +#NOI18N +imageLabel.icon=about.png diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/Tubes5ProginApp.properties b/Tubes5-Progin/build/classes/tubes5progin/resources/Tubes5ProginApp.properties new file mode 100644 index 00000000..7af8304a --- /dev/null +++ b/Tubes5-Progin/build/classes/tubes5progin/resources/Tubes5ProginApp.properties @@ -0,0 +1,11 @@ +# Application global resources + +Application.name = Tubes5-Progin +Application.title = Basic Application Example +Application.version = 1.0 +Application.vendor = Sun Microsystems Inc. +Application.homepage = http\://appframework.dev.java.net/ +Application.description = A simple Java desktop application based on Swing Application Framework. +Application.vendorId = Sun +Application.id = ${Application.name} +Application.lookAndFeel = system diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/Tubes5ProginView.properties b/Tubes5-Progin/build/classes/tubes5progin/resources/Tubes5ProginView.properties new file mode 100644 index 00000000..dbf03362 --- /dev/null +++ b/Tubes5-Progin/build/classes/tubes5progin/resources/Tubes5ProginView.properties @@ -0,0 +1,53 @@ + +# @Action resources + +showAboutBox.Action.text = &About... +showAboutBox.Action.shortDescription = Show the application's information dialog + +# status bar resources + +StatusBar.messageTimeout = 5000 +StatusBar.busyAnimationRate = 30 +StatusBar.idleIcon = busyicons/idle-icon.png +StatusBar.busyIcons[0] = busyicons/busy-icon0.png +StatusBar.busyIcons[1] = busyicons/busy-icon1.png +StatusBar.busyIcons[2] = busyicons/busy-icon2.png +StatusBar.busyIcons[3] = busyicons/busy-icon3.png +StatusBar.busyIcons[4] = busyicons/busy-icon4.png +StatusBar.busyIcons[5] = busyicons/busy-icon5.png +StatusBar.busyIcons[6] = busyicons/busy-icon6.png +StatusBar.busyIcons[7] = busyicons/busy-icon7.png +StatusBar.busyIcons[8] = busyicons/busy-icon8.png +StatusBar.busyIcons[9] = busyicons/busy-icon9.png +StatusBar.busyIcons[10] = busyicons/busy-icon10.png +StatusBar.busyIcons[11] = busyicons/busy-icon11.png +StatusBar.busyIcons[12] = busyicons/busy-icon12.png +StatusBar.busyIcons[13] = busyicons/busy-icon13.png +StatusBar.busyIcons[14] = busyicons/busy-icon14.png +OnClickOk.Action.text=aaaa +OnClickOk.Action.shortDescription= +jLabel1.text=Password +jTextField1.text= +jLabel2.text=Username +jLabel3.text=jLabel3 +jTable1.columnModel.title0=Title 1 +jTable1.columnModel.title3=Title 4 +jTable1.columnModel.title2=Title 3 +jTable1.columnModel.title1=Title 2 +jButton2.text=jButton2 +#NOI18N +mainPanel.background=0, 204, 51 +#NOI18N +mainPanel.foreground=0, 0, 0 +helpMenu.text=Help +# Resources for the Tubes5ProginView class + +# top-level menus +fileMenu.text=File +jButton3.text=Logout +jMenuItem1.text=Logout +jButton1.text=OK +#NOI18N +jTable1.background=153, 255, 153 +#NOI18N +jTable1.gridColor=204, 204, 204 diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/about.png b/Tubes5-Progin/build/classes/tubes5progin/resources/about.png new file mode 100644 index 00000000..c6dfe0a5 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/about.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon0.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon0.png new file mode 100644 index 00000000..242c0c85 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon0.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon1.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon1.png new file mode 100644 index 00000000..9f6f6343 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon1.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon10.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon10.png new file mode 100644 index 00000000..c4ef4a1f Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon10.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon11.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon11.png new file mode 100644 index 00000000..6eca1f5e Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon11.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon12.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon12.png new file mode 100644 index 00000000..e447ee8a Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon12.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon13.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon13.png new file mode 100644 index 00000000..848a6f1a Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon13.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon14.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon14.png new file mode 100644 index 00000000..7b3561df Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon14.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon2.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon2.png new file mode 100644 index 00000000..c866e62a Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon2.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon3.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon3.png new file mode 100644 index 00000000..9be22fa5 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon3.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon4.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon4.png new file mode 100644 index 00000000..f07c20dc Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon4.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon5.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon5.png new file mode 100644 index 00000000..653fc9c3 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon5.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon6.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon6.png new file mode 100644 index 00000000..70355726 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon6.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon7.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon7.png new file mode 100644 index 00000000..49fbc6ec Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon7.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon8.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon8.png new file mode 100644 index 00000000..e1a5a409 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon8.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon9.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon9.png new file mode 100644 index 00000000..82780123 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/busy-icon9.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/idle-icon.png b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/idle-icon.png new file mode 100644 index 00000000..50312f85 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/busyicons/idle-icon.png differ diff --git a/Tubes5-Progin/build/classes/tubes5progin/resources/splash.png b/Tubes5-Progin/build/classes/tubes5progin/resources/splash.png new file mode 100644 index 00000000..a1fbdc10 Binary files /dev/null and b/Tubes5-Progin/build/classes/tubes5progin/resources/splash.png differ diff --git a/Tubes5-Progin/dist/README.TXT b/Tubes5-Progin/dist/README.TXT new file mode 100644 index 00000000..65b6f332 --- /dev/null +++ b/Tubes5-Progin/dist/README.TXT @@ -0,0 +1,32 @@ +======================== +BUILD OUTPUT DESCRIPTION +======================== + +When you build an Java application project that has a main class, the IDE +automatically copies all of the JAR +files on the projects classpath to your projects dist/lib folder. The IDE +also adds each of the JAR files to the Class-Path element in the application +JAR files manifest file (MANIFEST.MF). + +To run the project from the command line, go to the dist folder and +type the following: + +java -jar "Tubes5-Progin.jar" + +To distribute this project, zip up the dist folder (including the lib folder) +and distribute the ZIP file. + +Notes: + +* If two JAR files on the project classpath have the same name, only the first +JAR file is copied to the lib folder. +* Only JAR files are copied to the lib folder. +If the classpath contains other types of files or folders, these files (folders) +are not copied. +* If a library on the projects classpath also has a Class-Path element +specified in the manifest,the content of the Class-Path element has to be on +the projects runtime path. +* To set a main class in a standard Java project, right-click the project node +in the Projects window and choose Properties. Then click Run and enter the +class name in the Main Class field. Alternatively, you can manually type the +class name in the manifest Main-Class element. diff --git a/Tubes5-Progin/dist/Tubes5-Progin.jar b/Tubes5-Progin/dist/Tubes5-Progin.jar new file mode 100644 index 00000000..9be08248 Binary files /dev/null and b/Tubes5-Progin/dist/Tubes5-Progin.jar differ diff --git a/Tubes5-Progin/dist/lib/appframework-1.0.3.jar b/Tubes5-Progin/dist/lib/appframework-1.0.3.jar new file mode 100644 index 00000000..9f5cdbf7 Binary files /dev/null and b/Tubes5-Progin/dist/lib/appframework-1.0.3.jar differ diff --git a/Tubes5-Progin/dist/lib/swing-worker-1.1.jar b/Tubes5-Progin/dist/lib/swing-worker-1.1.jar new file mode 100644 index 00000000..02f23a3a Binary files /dev/null and b/Tubes5-Progin/dist/lib/swing-worker-1.1.jar differ diff --git a/Tubes5-Progin/manifest.mf b/Tubes5-Progin/manifest.mf new file mode 100644 index 00000000..328e8e5b --- /dev/null +++ b/Tubes5-Progin/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/Tubes5-Progin/nbproject/build-impl.xml b/Tubes5-Progin/nbproject/build-impl.xml new file mode 100644 index 00000000..a926f523 --- /dev/null +++ b/Tubes5-Progin/nbproject/build-impl.xml @@ -0,0 +1,1040 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + + + + + + java -cp "${run.classpath.with.dist.jar}" ${main.class} + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + + + + + + + + Must select one file in the IDE or set profile.class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tubes5-Progin/nbproject/genfiles.properties b/Tubes5-Progin/nbproject/genfiles.properties new file mode 100644 index 00000000..99c7adea --- /dev/null +++ b/Tubes5-Progin/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=519dac0f +build.xml.script.CRC32=4337d1b4 +build.xml.stylesheet.CRC32=28e38971@1.44.1.45 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=519dac0f +nbproject/build-impl.xml.script.CRC32=9616c303 +nbproject/build-impl.xml.stylesheet.CRC32=0ae3a408@1.44.1.45 diff --git a/Tubes5-Progin/nbproject/private/private.properties b/Tubes5-Progin/nbproject/private/private.properties new file mode 100644 index 00000000..0ffccac7 --- /dev/null +++ b/Tubes5-Progin/nbproject/private/private.properties @@ -0,0 +1,3 @@ +#Fri May 17 07:50:02 ICT 2013 +compile.on.save=true +user.properties.file=C:\\Users\\User\\.netbeans\\7.0\\build.properties diff --git a/Tubes5-Progin/nbproject/private/private.xml b/Tubes5-Progin/nbproject/private/private.xml new file mode 100644 index 00000000..c1f155a7 --- /dev/null +++ b/Tubes5-Progin/nbproject/private/private.xml @@ -0,0 +1,4 @@ + + + + diff --git a/Tubes5-Progin/nbproject/project.properties b/Tubes5-Progin/nbproject/project.properties new file mode 100644 index 00000000..96aae4a5 --- /dev/null +++ b/Tubes5-Progin/nbproject/project.properties @@ -0,0 +1,63 @@ +application.desc=A simple java desktop application based on Swing Application Framework +application.homepage=http://appframework.dev.java.net +application.title=Basic Application Example +application.vendor=Sun Microsystems Inc. +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/Tubes5-Progin.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +includes=** +jar.compress=false +javac.classpath=\ + ${libs.swing-app-framework.classpath} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.source=1.5 +javac.target=1.5 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class=tubes5progin.Tubes5ProginApp +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value +# or test-sys-prop.name=value to set system properties for unit tests): +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/Tubes5-Progin/nbproject/project.xml b/Tubes5-Progin/nbproject/project.xml new file mode 100644 index 00000000..4969645d --- /dev/null +++ b/Tubes5-Progin/nbproject/project.xml @@ -0,0 +1,19 @@ + + + org.netbeans.modules.java.j2seproject + + + Tubes5-Progin + 1.6.5 + + + + + + + + + + + + diff --git a/Tubes5-Progin/src/META-INF/services/org.jdesktop.application.Application b/Tubes5-Progin/src/META-INF/services/org.jdesktop.application.Application new file mode 100644 index 00000000..e944b982 --- /dev/null +++ b/Tubes5-Progin/src/META-INF/services/org.jdesktop.application.Application @@ -0,0 +1 @@ +tubes5progin.Tubes5ProginApp \ No newline at end of file diff --git a/Tubes5-Progin/src/client/Client.java b/Tubes5-Progin/src/client/Client.java new file mode 100644 index 00000000..8bb4e7f2 --- /dev/null +++ b/Tubes5-Progin/src/client/Client.java @@ -0,0 +1,362 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package client; + +import java.io.*; +import java.net.Socket; +import java.net.UnknownHostException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; +import model.Tugas; + +public class Client { + + private String serverName = "localhost"; + private int port = 6066; + private String username; + private boolean login = false; + private long deltaTime; + private static int command = 0; + private List tasks; + private boolean prevState = false; + private boolean State = false; + + public Client() { + } + + public int getPort() { + return port; + } + + public byte[] serialize(Object obj) throws IOException { + ByteArrayOutputStream b = new ByteArrayOutputStream(); + ObjectOutputStream o = new ObjectOutputStream(b); + o.writeObject(obj); + return b.toByteArray(); + } + + public Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException { + ByteArrayInputStream b = new ByteArrayInputStream(bytes); + ObjectInputStream o = new ObjectInputStream(b); + return o.readObject(); + } + + /** + * @return the serverName + */ + public String getServerName() { + return serverName; + } + + /** + * @param serverName the serverName to set + */ + public void setServerName(String serverName) { + this.serverName = serverName; + } + + /** + * @param port the port to set + */ + public void setPort(int port) { + this.port = port; + } + + /** + * @return the username + */ + public String getUsername() { + return username; + } + + /** + * @param username the username to set + */ + public void setUsername(String username) { + this.username = username; + } + + /** + * @return the isLogin + */ + public boolean isLogin() { + return login; + } + + /** + * @param isLogin the isLogin to set + */ + public void setLogin(boolean login) { + this.login = login; + } + + /** + * @return the deltaTime + */ + public long getDeltaTime() { + return deltaTime; + } + + /** + * @param deltaTime the deltaTime to set + */ + public void setDeltaTime(long deltaTime) { + this.deltaTime = deltaTime; + } + + /** + * @return the command + */ + public int getCommand() { + return command; + } + + /** + * @param command the command to set + */ + public void setCommand(int command) { + this.command = command; + } + + public void checkOnline() { + prevState = State; + try { + System.out.println("Connecting to " + getServerName() + " on port " + getPort()); + Socket socket; + socket = new Socket(getServerName(), getPort()); + System.out.println("Just connected to " + socket.getRemoteSocketAddress()); + socket.close(); + State = true; + } catch (IOException ex) { + State = false; + } + + } + + public void Login(String user, String pass) { + try { + System.out.println(user + " " + pass); + System.out.println("Connecting to " + getServerName() + " on port " + getPort()); + Socket socket = new Socket(getServerName(), getPort()); + System.out.println("Just connected to " + socket.getRemoteSocketAddress()); + + OutputStream outToServer = socket.getOutputStream(); + DataOutputStream out = new DataOutputStream(outToServer); + + out.writeUTF("login#" + user + "#" + pass); + + InputStream inFromServer = socket.getInputStream(); + DataInputStream in = new DataInputStream(inFromServer); + String response = in.readUTF(); + System.out.println(response); + String split[] = response.split("#"); + if (Boolean.parseBoolean(split[0])) { + setDeltaTime(Long.parseLong(split[1], 10) - System.currentTimeMillis()); + setUsername(user); + setLogin(true); + } + socket.close(); + State = true; + } catch (IOException ex) { + } + } + + public void update(int id, boolean stats) { + String request = "update#" + id + "#" + stats + "#" + (System.currentTimeMillis() + getDeltaTime()); + try { + BufferedWriter out = new BufferedWriter(new FileWriter(getUsername() + "_log.txt", true)); + out.write(request + "\n"); + out.close(); + } catch (IOException ex1) { + } + try { + System.out.println("Connecting to " + getServerName() + " on port " + getPort()); + Socket socket = new Socket(getServerName(), getPort()); + socket.setSoTimeout(10000); + System.out.println("Just connected to " + socket.getRemoteSocketAddress()); + + OutputStream outToServer = socket.getOutputStream(); + DataOutputStream out = new DataOutputStream(outToServer); + + out.writeUTF(request); + + socket.close(); + } catch (IOException ex) { + } + } + + public void sync() { + if (!isPrevState() && isState()) { + try { + HashMap logging = new HashMap(); + BufferedReader br = new BufferedReader(new FileReader(getUsername() + "_log.txt")); + String line = br.readLine(); + while (!(line == null)) { + String split[] = line.split("#"); + logging.put(Integer.parseInt(split[1]), line); + line = br.readLine(); + } + br.close(); + Iterator it = logging.entrySet().iterator(); + while (it.hasNext()) { + Map.Entry pairs = (Map.Entry) it.next(); + try { + Socket socket = new Socket(getServerName(), getPort()); + socket.setSoTimeout(10000); + + OutputStream outToServer = socket.getOutputStream(); + DataOutputStream out = new DataOutputStream(outToServer); + + out.writeUTF(pairs.getValue().toString()); + + socket.close(); + + } catch (IOException ex) { + } + it.remove(); + } + + } catch (IOException ex) { + } + } + + if (State) { + try { + System.out.println("Connecting to " + getServerName() + " on port " + getPort()); + Socket socket = new Socket(getServerName(), getPort()); + socket.setSoTimeout(10000); + System.out.println("Just connected to " + socket.getRemoteSocketAddress()); + + OutputStream outToServer = socket.getOutputStream(); + DataOutputStream out = new DataOutputStream(outToServer); + + out.writeUTF("sync#" + getUsername()); + InputStream inFromServer = socket.getInputStream(); + DataInputStream in = new DataInputStream(inFromServer); + + int len = in.readInt(); + System.out.println("len :" + len); + byte[] data = new byte[len]; + if (len > 0) { + in.readFully(data, 0, len); + } + setTasks((List) deserialize(data)); + for (int i = 0; i < getTasks().size(); i++) { + System.out.println(i); + System.out.println(getTasks().get(i).getId() + getTasks().get(i).getNama() + getTasks().get(i).getDeadline().toString() + getTasks().get(i).isStatus() + getTasks().get(i).getLast_mod() + getTasks().get(i).getKategori() + getTasks().get(i).getAssignee() + getTasks().get(i).getTag()); + } + socket.close(); + setPrevState(isState()); + setState(true); + } catch (ClassNotFoundException ex) { + } catch (IOException ex) { + setPrevState(isState()); + setState(false); + } + } + } + + public void logout() { + setLogin(false); + setUsername(""); + } + +// @Override +// public void run() { +// while (true) { +// +// if (!isLogin()) { +// System.out.print("command : "); +// BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in)); +// try { +// command = Integer.parseInt(br1.readLine()); +// } catch (IOException ex) { +// +// } +// if (getCommand() == 0) { +// Login("wilson", "12345678"); +// +// sync(); +// } +// } else { +// try { +// System.out.print("command : "); +// BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); +// command = Integer.parseInt(br.readLine()); +// System.out.println(command); +// switch (getCommand()) { +// case 1: +// System.out.print("id : "); +// BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in)); +// int idt = Integer.parseInt(br2.readLine()); +// update(idt, true);//update +// break; +// case 2: +// sync(); //synchronization +// break; +// case 3: +// logout(); +// break; +// default : break; +// } +// setCommand(-1); +// } catch (IOException ex) { +// +// } +// } +// } +// } +// +// public static void main(String[] args) throws IOException +// { +// Thread t = new Client(); +// t.start(); +// } + /** + * @return the tasks + */ + public List getTasks() { + return tasks; + } + + /** + * @param tasks the tasks to set + */ + public void setTasks(List tasks) { + this.tasks = tasks; + } + + /** + * @return the prevState + */ + public boolean isPrevState() { + return prevState; + } + + /** + * @param prevState the prevState to set + */ + public void setPrevState(boolean prevState) { + this.prevState = prevState; + } + + /** + * @return the State + */ + public boolean isState() { + return State; + } + + /** + * @param State the State to set + */ + public void setState(boolean State) { + this.State = State; + } +} \ No newline at end of file diff --git a/Tubes5-Progin/src/model/Tugas.java b/Tubes5-Progin/src/model/Tugas.java new file mode 100644 index 00000000..bdec45e0 --- /dev/null +++ b/Tubes5-Progin/src/model/Tugas.java @@ -0,0 +1,134 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package model; + +import java.util.Date; + +/** + * + * @author TOSHIBA + */ +public class Tugas implements java.io.Serializable { + private int id; + private String nama; + private Date deadline; + private String kategori; + private String assignee; + private String tag; + private boolean status; + private long last_mod; + + /** + * @return the id + */ + public int getId() { + return id; + } + + /** + * @param id the id to set + */ + public void setId(int id) { + this.id = id; + } + + /** + * @return the nama + */ + public String getNama() { + return nama; + } + + /** + * @param nama the nama to set + */ + public void setNama(String nama) { + this.nama = nama; + } + + /** + * @return the deadline + */ + public Date getDeadline() { + return deadline; + } + + /** + * @param deadline the deadline to set + */ + public void setDeadline(Date deadline) { + this.deadline = deadline; + } + + /** + * @return the kategori + */ + public String getKategori() { + return kategori; + } + + /** + * @param kategori the kategori to set + */ + public void setKategori(String kategori) { + this.kategori = kategori; + } + + /** + * @return the assignee + */ + public String getAssignee() { + return assignee; + } + + /** + * @param assignee the assignee to set + */ + public void setAssignee(String assignee) { + this.assignee = assignee; + } + + /** + * @return the tag + */ + public String getTag() { + return tag; + } + + /** + * @param tag the tag to set + */ + public void setTag(String tag) { + this.tag = tag; + } + + /** + * @return the status + */ + public boolean isStatus() { + return status; + } + + /** + * @param status the status to set + */ + public void setStatus(boolean status) { + this.status = status; + } + + /** + * @return the last_mod + */ + public long getLast_mod() { + return last_mod; + } + + /** + * @param last_mod the last_mod to set + */ + public void setLast_mod(long last_mod) { + this.last_mod = last_mod; + } +} diff --git a/Tubes5-Progin/src/tubes5progin/TableCellListener.java b/Tubes5-Progin/src/tubes5progin/TableCellListener.java new file mode 100644 index 00000000..9a759135 --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/TableCellListener.java @@ -0,0 +1,173 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package tubes5progin; +import java.awt.event.*; +import javax.swing.*; +import java.beans.*; + +/* + * This class listens for changes made to the data in the table via the + * TableCellEditor. When editing is started, the value of the cell is saved + * When editing is stopped the new value is saved. When the oold and new + * values are different, then the provided Action is invoked. + * + * The source of the Action is a TableCellListener instance. + */ +public class TableCellListener implements PropertyChangeListener, Runnable +{ + private JTable table; + private Action action; + + private int row; + private int column; + private Object oldValue; + private Object newValue; + + /** + * Create a TableCellListener. + * + * @param table the table to be monitored for data changes + * @param action the Action to invoke when cell data is changed + */ + public TableCellListener(JTable table, Action action) + { + this.table = table; + this.action = action; + this.table.addPropertyChangeListener( this ); + } + + /** + * Create a TableCellListener with a copy of all the data relevant to + * the change of data for a given cell. + * + * @param row the row of the changed cell + * @param column the column of the changed cell + * @param oldValue the old data of the changed cell + * @param newValue the new data of the changed cell + */ + private TableCellListener(JTable table, int row, int column, Object oldValue, Object newValue) + { + this.table = table; + this.row = row; + this.column = column; + this.oldValue = oldValue; + this.newValue = newValue; + } + + /** + * Get the column that was last edited + * + * @return the column that was edited + */ + public int getColumn() + { + return column; + } + + /** + * Get the new value in the cell + * + * @return the new value in the cell + */ + public Object getNewValue() + { + return newValue; + } + + /** + * Get the old value of the cell + * + * @return the old value of the cell + */ + public Object getOldValue() + { + return oldValue; + } + + /** + * Get the row that was last edited + * + * @return the row that was edited + */ + public int getRow() + { + return row; + } + + /** + * Get the table of the cell that was changed + * + * @return the table of the cell that was changed + */ + public JTable getTable() + { + return table; + } +// +// Implement the PropertyChangeListener interface +// + @Override + public void propertyChange(PropertyChangeEvent e) + { + // A cell has started/stopped editing + + if ("tableCellEditor".equals(e.getPropertyName())) + { + if (table.isEditing()) + processEditingStarted(); + else + processEditingStopped(); + } + } + + /* + * Save information of the cell about to be edited + */ + private void processEditingStarted() + { + // The invokeLater is necessary because the editing row and editing + // column of the table have not been set when the "tableCellEditor" + // PropertyChangeEvent is fired. + // This results in the "run" method being invoked + + SwingUtilities.invokeLater( this ); + } + /* + * See above. + */ + @Override + public void run() + { + row = table.convertRowIndexToModel( table.getEditingRow() ); + column = table.convertColumnIndexToModel( table.getEditingColumn() ); + oldValue = table.getModel().getValueAt(row, column); + newValue = null; + } + + /* + * Update the Cell history when necessary + */ + private void processEditingStopped() + { + newValue = table.getModel().getValueAt(row, column); + + // The data has changed, invoke the supplied Action + + if (! newValue.equals(oldValue)) + { + // Make a copy of the data in case another cell starts editing + // while processing this change + + TableCellListener tcl = new TableCellListener( + getTable(), getRow(), getColumn(), getOldValue(), getNewValue()); + + ActionEvent event = new ActionEvent( + tcl, + ActionEvent.ACTION_PERFORMED, + ""); + action.actionPerformed(event); + } + } +} diff --git a/Tubes5-Progin/src/tubes5progin/TableCellLongTextRenderer.java b/Tubes5-Progin/src/tubes5progin/TableCellLongTextRenderer.java new file mode 100644 index 00000000..9c0ef09b --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/TableCellLongTextRenderer.java @@ -0,0 +1,37 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package tubes5progin; + +import java.awt.Component; +import javax.swing.JTable; +import javax.swing.JTextArea; +import javax.swing.UIManager; +import javax.swing.border.EmptyBorder; +import javax.swing.table.TableCellRenderer; + +/** + * + * @author Yulianti Oenang + */ +public class TableCellLongTextRenderer extends JTextArea implements TableCellRenderer{ + +@Override +public Component getTableCellRendererComponent(JTable table, Object value, +boolean isSelected, boolean hasFocus, int row, int column) { + + this.setText((String)value); + this.setWrapStyleWord(true); + this.setLineWrap(true); + + //set the JTextArea to the width of the table column + setSize(table.getColumnModel().getColumn(column).getWidth(),getPreferredSize().height); + + if (table.getRowHeight(row) < getPreferredSize().height) { + //set the height of the table row to the calculated height of the JTextArea + table.setRowHeight(row, getPreferredSize().height); + } + + return this; +}} \ No newline at end of file diff --git a/Tubes5-Progin/src/tubes5progin/Tubes5ProginAboutBox.form b/Tubes5-Progin/src/tubes5progin/Tubes5ProginAboutBox.form new file mode 100644 index 00000000..5075217f --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/Tubes5ProginAboutBox.form @@ -0,0 +1,204 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tubes5-Progin/src/tubes5progin/Tubes5ProginAboutBox.java b/Tubes5-Progin/src/tubes5progin/Tubes5ProginAboutBox.java new file mode 100644 index 00000000..165ba943 --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/Tubes5ProginAboutBox.java @@ -0,0 +1,137 @@ +/* + * Tubes5ProginAboutBox.java + */ + +package tubes5progin; + +import org.jdesktop.application.Action; + +public class Tubes5ProginAboutBox extends javax.swing.JDialog { + + public Tubes5ProginAboutBox(java.awt.Frame parent) { + super(parent); + initComponents(); + getRootPane().setDefaultButton(closeButton); + } + + @Action public void closeAboutBox() { + dispose(); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + closeButton = new javax.swing.JButton(); + javax.swing.JLabel appTitleLabel = new javax.swing.JLabel(); + javax.swing.JLabel versionLabel = new javax.swing.JLabel(); + javax.swing.JLabel appVersionLabel = new javax.swing.JLabel(); + javax.swing.JLabel vendorLabel = new javax.swing.JLabel(); + javax.swing.JLabel appVendorLabel = new javax.swing.JLabel(); + javax.swing.JLabel homepageLabel = new javax.swing.JLabel(); + javax.swing.JLabel appHomepageLabel = new javax.swing.JLabel(); + javax.swing.JLabel appDescLabel = new javax.swing.JLabel(); + javax.swing.JLabel imageLabel = new javax.swing.JLabel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); + org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(tubes5progin.Tubes5ProginApp.class).getContext().getResourceMap(Tubes5ProginAboutBox.class); + setTitle(resourceMap.getString("title")); // NOI18N + setModal(true); + setName("aboutBox"); // NOI18N + setResizable(false); + + javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(tubes5progin.Tubes5ProginApp.class).getContext().getActionMap(Tubes5ProginAboutBox.class, this); + closeButton.setAction(actionMap.get("closeAboutBox")); // NOI18N + closeButton.setName("closeButton"); // NOI18N + + appTitleLabel.setFont(appTitleLabel.getFont().deriveFont(appTitleLabel.getFont().getStyle() | java.awt.Font.BOLD, appTitleLabel.getFont().getSize()+4)); + appTitleLabel.setText(resourceMap.getString("Application.title")); // NOI18N + appTitleLabel.setName("appTitleLabel"); // NOI18N + + versionLabel.setFont(versionLabel.getFont().deriveFont(versionLabel.getFont().getStyle() | java.awt.Font.BOLD)); + versionLabel.setText(resourceMap.getString("versionLabel.text")); // NOI18N + versionLabel.setName("versionLabel"); // NOI18N + + appVersionLabel.setText(resourceMap.getString("Application.version")); // NOI18N + appVersionLabel.setName("appVersionLabel"); // NOI18N + + vendorLabel.setFont(vendorLabel.getFont().deriveFont(vendorLabel.getFont().getStyle() | java.awt.Font.BOLD)); + vendorLabel.setText(resourceMap.getString("vendorLabel.text")); // NOI18N + vendorLabel.setName("vendorLabel"); // NOI18N + + appVendorLabel.setText(resourceMap.getString("Application.vendor")); // NOI18N + appVendorLabel.setName("appVendorLabel"); // NOI18N + + homepageLabel.setFont(homepageLabel.getFont().deriveFont(homepageLabel.getFont().getStyle() | java.awt.Font.BOLD)); + homepageLabel.setText(resourceMap.getString("homepageLabel.text")); // NOI18N + homepageLabel.setName("homepageLabel"); // NOI18N + + appHomepageLabel.setText(resourceMap.getString("Application.homepage")); // NOI18N + appHomepageLabel.setName("appHomepageLabel"); // NOI18N + + appDescLabel.setText(resourceMap.getString("appDescLabel.text")); // NOI18N + appDescLabel.setName("appDescLabel"); // NOI18N + + imageLabel.setIcon(resourceMap.getIcon("imageLabel.icon")); // NOI18N + imageLabel.setName("imageLabel"); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(imageLabel) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(versionLabel) + .addComponent(vendorLabel) + .addComponent(homepageLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(appVersionLabel) + .addComponent(appVendorLabel) + .addComponent(appHomepageLabel))) + .addComponent(appTitleLabel, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(appDescLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 266, Short.MAX_VALUE) + .addComponent(closeButton)) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(imageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(appTitleLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(appDescLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(versionLabel) + .addComponent(appVersionLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(vendorLabel) + .addComponent(appVendorLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(homepageLabel) + .addComponent(appHomepageLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 19, Short.MAX_VALUE) + .addComponent(closeButton) + .addContainerGap()) + ); + + pack(); + }// //GEN-END:initComponents + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton closeButton; + // End of variables declaration//GEN-END:variables + +} diff --git a/Tubes5-Progin/src/tubes5progin/Tubes5ProginApp.java b/Tubes5-Progin/src/tubes5progin/Tubes5ProginApp.java new file mode 100644 index 00000000..055efde6 --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/Tubes5ProginApp.java @@ -0,0 +1,43 @@ +/* + * Tubes5ProginApp.java + */ + +package tubes5progin; + +import org.jdesktop.application.Application; +import org.jdesktop.application.SingleFrameApplication; + +/** + * The main class of the application. + */ +public class Tubes5ProginApp extends SingleFrameApplication { + /** + * At startup create and show the main frame of the application. + */ + @Override protected void startup() { + show(new Tubes5ProginView(this)); + } + + /** + * This method is to initialize the specified window by injecting resources. + * Windows shown in our application come fully initialized from the GUI + * builder, so this additional configuration is not needed. + */ + @Override protected void configureWindow(java.awt.Window root) { + } + + /** + * A convenient static getter for the application instance. + * @return the instance of Tubes5ProginApp + */ + public static Tubes5ProginApp getApplication() { + return Application.getInstance(Tubes5ProginApp.class); + } + + /** + * Main method launching the application. + */ + public static void main(String[] args) { + launch(Tubes5ProginApp.class, args); + } +} diff --git a/Tubes5-Progin/src/tubes5progin/Tubes5ProginView.form b/Tubes5-Progin/src/tubes5progin/Tubes5ProginView.form new file mode 100644 index 00000000..24c86efb --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/Tubes5ProginView.form @@ -0,0 +1,332 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + <Editor/> + <Renderer/> + </Column> + <Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true"> + <Title resourceKey="jTable1.columnModel.title1"/> + <Editor/> + <Renderer/> + </Column> + <Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true"> + <Title resourceKey="jTable1.columnModel.title2"/> + <Editor/> + <Renderer/> + </Column> + <Column maxWidth="-1" minWidth="-1" prefWidth="-1" resizable="true"> + <Title resourceKey="jTable1.columnModel.title3"/> + <Editor/> + <Renderer/> + </Column> + </TableColumnModel> + </Property> + <Property name="gridColor" type="java.awt.Color" resourceKey="jTable1.gridColor"/> + <Property name="name" type="java.lang.String" value="jTable1" noResource="true"/> + <Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor"> + <TableHeader reorderingAllowed="true" resizingAllowed="true"/> + </Property> + </Properties> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JButton" name="jButton3"> + <Properties> + <Property name="text" type="java.lang.String" resourceKey="jButton3.text"/> + <Property name="name" type="java.lang.String" value="jButton3" noResource="true"/> + </Properties> + <Events> + <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton3ActionPerformed"/> + </Events> + </Component> + </SubComponents> + </Container> + <Container class="javax.swing.JMenuBar" name="menuBar"> + <Properties> + <Property name="name" type="java.lang.String" value="menuBar" noResource="true"/> + </Properties> + + <Layout class="org.netbeans.modules.form.compat2.layouts.DesignAbsoluteLayout"> + <Property name="useNullLayout" type="boolean" value="true"/> + </Layout> + <SubComponents> + <Menu class="javax.swing.JMenu" name="fileMenu"> + <Properties> + <Property name="text" type="java.lang.String" resourceKey="fileMenu.text"/> + <Property name="name" type="java.lang.String" value="fileMenu" noResource="true"/> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/> + </AuxValues> + <SubComponents> + <MenuItem class="javax.swing.JMenuItem" name="exitMenuItem"> + <Properties> + <Property name="action" type="javax.swing.Action" editor="org.netbeans.modules.swingapp.ActionEditor"> + <action class="org.jdesktop.application.Application" id="quit" methodName="quit"/> + </Property> + <Property name="name" type="java.lang.String" value="exitMenuItem" noResource="true"/> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/> + </AuxValues> + </MenuItem> + <MenuItem class="javax.swing.JMenuItem" name="jMenuItem1"> + <Properties> + <Property name="text" type="java.lang.String" resourceKey="jMenuItem1.text"/> + <Property name="name" type="java.lang.String" value="jMenuItem1" noResource="true"/> + </Properties> + </MenuItem> + </SubComponents> + </Menu> + <Menu class="javax.swing.JMenu" name="helpMenu"> + <Properties> + <Property name="text" type="java.lang.String" resourceKey="helpMenu.text"/> + <Property name="name" type="java.lang.String" value="helpMenu" noResource="true"/> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/> + </AuxValues> + <SubComponents> + <MenuItem class="javax.swing.JMenuItem" name="aboutMenuItem"> + <Properties> + <Property name="action" type="javax.swing.Action" editor="org.netbeans.modules.swingapp.ActionEditor"> + <action class="tubes5progin.Tubes5ProginView" id="showAboutBox" methodName="showAboutBox"/> + </Property> + <Property name="name" type="java.lang.String" value="aboutMenuItem" noResource="true"/> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/> + </AuxValues> + </MenuItem> + </SubComponents> + </Menu> + </SubComponents> + </Container> + <Container class="javax.swing.JPanel" name="statusPanel"> + <Properties> + <Property name="name" type="java.lang.String" value="statusPanel" noResource="true"/> + </Properties> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="statusPanelSeparator" alignment="0" pref="670" max="32767" attributes="0"/> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Component id="statusMessageLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace pref="650" max="32767" attributes="0"/> + <Component id="statusAnimationLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="statusPanelSeparator" min="-2" pref="2" max="-2" attributes="0"/> + <EmptySpace max="32767" attributes="0"/> + <Group type="103" groupAlignment="3" attributes="0"> + <Component id="statusMessageLabel" alignment="3" min="-2" max="-2" attributes="0"/> + <Component id="statusAnimationLabel" alignment="3" min="-2" max="-2" attributes="0"/> + </Group> + <EmptySpace min="-2" pref="3" max="-2" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JSeparator" name="statusPanelSeparator"> + <Properties> + <Property name="name" type="java.lang.String" value="statusPanelSeparator" noResource="true"/> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="true"/> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="0"/> + </AuxValues> + </Component> + <Component class="javax.swing.JLabel" name="statusMessageLabel"> + <Properties> + <Property name="name" type="java.lang.String" value="statusMessageLabel" noResource="true"/> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + </Component> + <Component class="javax.swing.JLabel" name="statusAnimationLabel"> + <Properties> + <Property name="horizontalAlignment" type="int" value="2"/> + <Property name="name" type="java.lang.String" value="statusAnimationLabel" noResource="true"/> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + </Component> + </SubComponents> + </Container> + <Component class="javax.swing.JProgressBar" name="progressBar"> + <Properties> + <Property name="name" type="java.lang.String" value="progressBar" noResource="true"/> + </Properties> + <AuxValues> + <AuxValue name="JavaCodeGenerator_VariableLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + </Component> + <Component class="javax.swing.JButton" name="jButton2"> + <Properties> + <Property name="text" type="java.lang.String" resourceKey="jButton2.text"/> + <Property name="name" type="java.lang.String" value="jButton2" noResource="true"/> + </Properties> + </Component> + </NonVisualComponents> + <Properties> + <Property name="component" type="javax.swing.JComponent" editor="org.netbeans.modules.form.ComponentChooserEditor"> + <ComponentRef name="mainPanel"/> + </Property> + <Property name="menuBar" type="javax.swing.JMenuBar" editor="org.netbeans.modules.form.ComponentChooserEditor"> + <ComponentRef name="menuBar"/> + </Property> + <Property name="statusBar" type="javax.swing.JComponent" editor="org.netbeans.modules.form.ComponentChooserEditor"> + <ComponentRef name="statusPanel"/> + </Property> + </Properties> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="2"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + <AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,98,0,0,2,-98"/> + </AuxValues> +</Form> diff --git a/Tubes5-Progin/src/tubes5progin/Tubes5ProginView.java b/Tubes5-Progin/src/tubes5progin/Tubes5ProginView.java new file mode 100644 index 00000000..b21861ad --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/Tubes5ProginView.java @@ -0,0 +1,512 @@ +/* + * Tubes5ProginView.java + */ +package tubes5progin; + +import model.Tugas; +import client.Client; +import org.jdesktop.application.Action; +import org.jdesktop.application.ResourceMap; +import org.jdesktop.application.SingleFrameApplication; +import org.jdesktop.application.FrameView; +import org.jdesktop.application.TaskMonitor; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.TimerTask; +import javax.swing.Timer; +import javax.swing.AbstractAction; +import javax.swing.Icon; +import javax.swing.JDialog; +import javax.swing.JFrame; +import javax.swing.JOptionPane; + +/** + * The application's main frame. + */ +public class Tubes5ProginView extends FrameView { + + public List<Tugas> Task = new ArrayList<Tugas>(); + Date tanggal = new Date(); + Client client = new Client(); + java.util.Timer timer = new java.util.Timer(); + + public Tubes5ProginView(SingleFrameApplication app) { + super(app); + initComponents(); + timer.schedule(new TimerTask() { + @Override + public void run() { + if(client.isLogin()) + { + client.checkOnline(); + if (client.isState()) { + sync(); + System.out.println("Syncing..."); + } + } + } + }, 2000, 2000); + //mainPanel.setPreferredSize(new java.awt.Dimension(800, 800)); + mainPanel.setSize(800, 800); + jLabel3.setVisible(false); + Object data[][]; + data = new Object[Task.size()][6]; + for (int i = 0; i < Task.size(); i++) { + String tgl = Task.get(i).getDeadline().getDate() + "-" + (Task.get(i).getDeadline().getMonth() + 1) + "-" + Task.get(i).getDeadline().getYear(); + data[i][0] = Task.get(i).getNama(); + data[i][1] = Task.get(i).getDeadline(); + data[i][2] = Task.get(i).getAssignee(); + data[i][3] = Task.get(i).getTag(); + data[i][4] = Task.get(i).isStatus(); + data[i][5] = Task.get(i).getKategori(); + } + + jTable1.setModel(new javax.swing.table.DefaultTableModel( + data, + new Object[]{ + "Nama Tugas", "Deadline", "Assignee", "Tag", "Status", "Kategori" + }) { + + Class[] types = new Class[]{ + java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Boolean.class, java.lang.Object.class + }; + boolean[] canEdit = new boolean[]{ + false, false, false, false, true, false + }; + + public Class getColumnClass(int columnIndex) { + return types[columnIndex]; + } + }); + jTable1.setVisible(false); + jTable1.getColumnModel().getColumn(0).setCellRenderer(new TableCellLongTextRenderer()); + jTable1.getColumnModel().getColumn(1).setCellRenderer(new TableCellLongTextRenderer()); + jTable1.getColumnModel().getColumn(2).setCellRenderer(new TableCellLongTextRenderer()); + jTable1.getColumnModel().getColumn(3).setCellRenderer(new TableCellLongTextRenderer()); + jTable1.getColumnModel().getColumn(5).setCellRenderer(new TableCellLongTextRenderer()); + + jTable1.getColumnModel().getColumn(0).setMinWidth(100); + jTable1.getColumnModel().getColumn(0).setMaxWidth(100); + jTable1.getColumnModel().getColumn(1).setMinWidth(80); + jTable1.getColumnModel().getColumn(1).setMaxWidth(80); + jTable1.getColumnModel().getColumn(2).setMinWidth(100); + jTable1.getColumnModel().getColumn(2).setMaxWidth(100); + jTable1.getColumnModel().getColumn(3).setMinWidth(100); + jTable1.getColumnModel().getColumn(3).setMaxWidth(100); + jTable1.getColumnModel().getColumn(3).setMinWidth(100); + jTable1.getColumnModel().getColumn(3).setMaxWidth(100); + jTable1.getColumnModel().getColumn(4).setMinWidth(50); + jTable1.getColumnModel().getColumn(4).setMaxWidth(50); + jTable1.getColumnModel().getColumn(5).setMinWidth(100); + jTable1.getColumnModel().getColumn(5).setMaxWidth(100); + jScrollPane1.setVisible(false); + jButton3.setText("Logout"); + jButton3.setVisible(false); + AbstractAction action = new AbstractAction() { + + public void actionPerformed(ActionEvent e) { + TableCellListener tcl = (TableCellListener) e.getSource(); + System.out.println("Row : " + tcl.getRow()); + System.out.println("Column: " + tcl.getColumn()); + System.out.println("Old : " + tcl.getOldValue()); + System.out.println("New : " + tcl.getNewValue()); + System.out.println(Task.get(tcl.getRow()).getId()); + client.update(Task.get(tcl.getRow()).getId(), Boolean.parseBoolean(""+tcl.getNewValue())); + } + }; + + TableCellListener tcl = new TableCellListener(jTable1, action); + + // status bar initialization - message timeout, idle icon and busy animation, etc + ResourceMap resourceMap = getResourceMap(); + int messageTimeout = resourceMap.getInteger("StatusBar.messageTimeout"); + messageTimer = new Timer(messageTimeout, new ActionListener() { + + public void actionPerformed(ActionEvent e) { + statusMessageLabel.setText(""); + } + }); + + messageTimer.setRepeats( + false); + int busyAnimationRate = resourceMap.getInteger("StatusBar.busyAnimationRate"); + + for (int i = 0; + i < busyIcons.length; + i++) { + busyIcons[i] = resourceMap.getIcon("StatusBar.busyIcons[" + i + "]"); + } + busyIconTimer = new Timer(busyAnimationRate, new ActionListener() { + + public void actionPerformed(ActionEvent e) { + busyIconIndex = (busyIconIndex + 1) % busyIcons.length; + statusAnimationLabel.setIcon(busyIcons[busyIconIndex]); + } + }); + idleIcon = resourceMap.getIcon("StatusBar.idleIcon"); + + statusAnimationLabel.setIcon(idleIcon); + + progressBar.setVisible( + false); + + // connecting action tasks to status bar via TaskMonitor + TaskMonitor taskMonitor = new TaskMonitor(getApplication().getContext()); + + taskMonitor.addPropertyChangeListener( + new java.beans.PropertyChangeListener() { + + public void propertyChange(java.beans.PropertyChangeEvent evt) { + String propertyName = evt.getPropertyName(); + if ("started".equals(propertyName)) { + if (!busyIconTimer.isRunning()) { + statusAnimationLabel.setIcon(busyIcons[0]); + busyIconIndex = 0; + busyIconTimer.start(); + } + progressBar.setVisible(true); + progressBar.setIndeterminate(true); + } else if ("done".equals(propertyName)) { + busyIconTimer.stop(); + statusAnimationLabel.setIcon(idleIcon); + progressBar.setVisible(false); + progressBar.setValue(0); + } else if ("message".equals(propertyName)) { + String text = (String) (evt.getNewValue()); + statusMessageLabel.setText((text == null) ? "" : text); + messageTimer.restart(); + } else if ("progress".equals(propertyName)) { + int value = (Integer) (evt.getNewValue()); + progressBar.setVisible(true); + progressBar.setIndeterminate(false); + progressBar.setValue(value); + } + } + }); + } + + @Action + public void showAboutBox() { + if (aboutBox == null) { + JFrame mainFrame = Tubes5ProginApp.getApplication().getMainFrame(); + aboutBox = new Tubes5ProginAboutBox(mainFrame); + aboutBox.setLocationRelativeTo(mainFrame); + } + Tubes5ProginApp.getApplication().show(aboutBox); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + mainPanel = new javax.swing.JPanel(); + jButton1 = new javax.swing.JButton(); + jPasswordField1 = new javax.swing.JPasswordField(); + jLabel1 = new javax.swing.JLabel(); + jTextField1 = new javax.swing.JTextField(); + jLabel2 = new javax.swing.JLabel(); + jLabel3 = new javax.swing.JLabel(); + jScrollPane1 = new javax.swing.JScrollPane(); + jTable1 = new javax.swing.JTable(); + jButton3 = new javax.swing.JButton(); + menuBar = new javax.swing.JMenuBar(); + javax.swing.JMenu fileMenu = new javax.swing.JMenu(); + javax.swing.JMenuItem exitMenuItem = new javax.swing.JMenuItem(); + jMenuItem1 = new javax.swing.JMenuItem(); + javax.swing.JMenu helpMenu = new javax.swing.JMenu(); + javax.swing.JMenuItem aboutMenuItem = new javax.swing.JMenuItem(); + statusPanel = new javax.swing.JPanel(); + javax.swing.JSeparator statusPanelSeparator = new javax.swing.JSeparator(); + statusMessageLabel = new javax.swing.JLabel(); + statusAnimationLabel = new javax.swing.JLabel(); + progressBar = new javax.swing.JProgressBar(); + jButton2 = new javax.swing.JButton(); + + org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(tubes5progin.Tubes5ProginApp.class).getContext().getResourceMap(Tubes5ProginView.class); + mainPanel.setBackground(resourceMap.getColor("mainPanel.background")); // NOI18N + mainPanel.setForeground(resourceMap.getColor("mainPanel.foreground")); // NOI18N + mainPanel.setName("mainPanel"); // NOI18N + mainPanel.setPreferredSize(new java.awt.Dimension(537, 402)); + + javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(tubes5progin.Tubes5ProginApp.class).getContext().getActionMap(Tubes5ProginView.class, this); + jButton1.setAction(actionMap.get("OnClickOk")); // NOI18N + jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N + jButton1.setName("jButton1"); // NOI18N + + jPasswordField1.setName("Password"); // NOI18N + + jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N + jLabel1.setName("jLabel1"); // NOI18N + + jTextField1.setText(resourceMap.getString("jTextField1.text")); // NOI18N + jTextField1.setName("jTextField1"); // NOI18N + + jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N + jLabel2.setName("jLabel2"); // NOI18N + + jLabel3.setText(resourceMap.getString("jLabel3.text")); // NOI18N + jLabel3.setName("jLabel3"); // NOI18N + + jScrollPane1.setName("jScrollPane1"); // NOI18N + + jTable1.setBackground(resourceMap.getColor("jTable1.background")); // NOI18N + jTable1.setModel(new javax.swing.table.DefaultTableModel( + new Object [][] { + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null}, + {null, null, null, null} + }, + new String [] { + "Title 1", "Title 2", "Title 3", "Title 4" + } + ) { + Class[] types = new Class [] { + java.lang.Boolean.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class + }; + boolean[] canEdit = new boolean [] { + true, false, true, true + }; + + public Class getColumnClass(int columnIndex) { + return types [columnIndex]; + } + + public boolean isCellEditable(int rowIndex, int columnIndex) { + return canEdit [columnIndex]; + } + }); + jTable1.setGridColor(resourceMap.getColor("jTable1.gridColor")); // NOI18N + jTable1.setName("jTable1"); // NOI18N + jScrollPane1.setViewportView(jTable1); + jTable1.getColumnModel().getColumn(0).setHeaderValue(resourceMap.getString("jTable1.columnModel.title0")); // NOI18N + jTable1.getColumnModel().getColumn(1).setHeaderValue(resourceMap.getString("jTable1.columnModel.title1")); // NOI18N + jTable1.getColumnModel().getColumn(2).setHeaderValue(resourceMap.getString("jTable1.columnModel.title2")); // NOI18N + jTable1.getColumnModel().getColumn(3).setHeaderValue(resourceMap.getString("jTable1.columnModel.title3")); // NOI18N + + jButton3.setText(resourceMap.getString("jButton3.text")); // NOI18N + jButton3.setName("jButton3"); // NOI18N + jButton3.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButton3ActionPerformed(evt); + } + }); + + javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); + mainPanel.setLayout(mainPanelLayout); + mainPanelLayout.setHorizontalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGap(18, 18, 18) + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 634, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(jLabel2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jPasswordField1, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jButton1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel3) + .addGap(27, 27, 27) + .addComponent(jButton3))) + .addContainerGap(18, Short.MAX_VALUE)) + ); + mainPanelLayout.setVerticalGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel2) + .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1) + .addComponent(jPasswordField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jButton1) + .addComponent(jLabel3) + .addComponent(jButton3)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 13, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE)) + ); + + menuBar.setName("menuBar"); // NOI18N + + fileMenu.setText(resourceMap.getString("fileMenu.text")); // NOI18N + fileMenu.setName("fileMenu"); // NOI18N + + exitMenuItem.setAction(actionMap.get("quit")); // NOI18N + exitMenuItem.setName("exitMenuItem"); // NOI18N + fileMenu.add(exitMenuItem); + + jMenuItem1.setText(resourceMap.getString("jMenuItem1.text")); // NOI18N + jMenuItem1.setName("jMenuItem1"); // NOI18N + fileMenu.add(jMenuItem1); + + menuBar.add(fileMenu); + + helpMenu.setText(resourceMap.getString("helpMenu.text")); // NOI18N + helpMenu.setName("helpMenu"); // NOI18N + + aboutMenuItem.setAction(actionMap.get("showAboutBox")); // NOI18N + aboutMenuItem.setName("aboutMenuItem"); // NOI18N + helpMenu.add(aboutMenuItem); + + menuBar.add(helpMenu); + + statusPanel.setName("statusPanel"); // NOI18N + + statusPanelSeparator.setName("statusPanelSeparator"); // NOI18N + + statusMessageLabel.setName("statusMessageLabel"); // NOI18N + + statusAnimationLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + statusAnimationLabel.setName("statusAnimationLabel"); // NOI18N + + javax.swing.GroupLayout statusPanelLayout = new javax.swing.GroupLayout(statusPanel); + statusPanel.setLayout(statusPanelLayout); + statusPanelLayout.setHorizontalGroup( + statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(statusPanelSeparator, javax.swing.GroupLayout.DEFAULT_SIZE, 670, Short.MAX_VALUE) + .addGroup(statusPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(statusMessageLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 650, Short.MAX_VALUE) + .addComponent(statusAnimationLabel) + .addContainerGap()) + ); + statusPanelLayout.setVerticalGroup( + statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(statusPanelLayout.createSequentialGroup() + .addComponent(statusPanelSeparator, javax.swing.GroupLayout.PREFERRED_SIZE, 2, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(statusPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(statusMessageLabel) + .addComponent(statusAnimationLabel)) + .addGap(3, 3, 3)) + ); + + progressBar.setName("progressBar"); // NOI18N + + jButton2.setText(resourceMap.getString("jButton2.text")); // NOI18N + jButton2.setName("jButton2"); // NOI18N + + setComponent(mainPanel); + setMenuBar(menuBar); + setStatusBar(statusPanel); + }// </editor-fold>//GEN-END:initComponents + +private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed +// TODO add your handling code here: + client.logout(); + jTable1.setVisible(false); + jTextField1.setText(""); + jPasswordField1.setText(""); + jButton1.setVisible(true); + jLabel1.setVisible(true); + jLabel2.setVisible(true); + jTextField1.setVisible(true); + jPasswordField1.setVisible(true); + jButton3.setVisible(false); + jLabel3.setVisible(false); + jScrollPane1.setVisible(false); +}//GEN-LAST:event_jButton3ActionPerformed + @Action + public void OnClickOk() { + client.Login(jTextField1.getText(), jPasswordField1.getText()); + + //JOptionPane j; + if (client.isLogin()) { + jLabel1.setVisible(false); + jLabel2.setVisible(false); + jPasswordField1.setVisible(false); + jTextField1.setVisible(false); + jButton1.setVisible(false); + jLabel3.setVisible(true); + jLabel3.setText(jTextField1.getText()); + jTable1.setVisible(true); + jScrollPane1.setVisible(true); + jButton3.setVisible(true); + + + sync(); + } else { + JOptionPane.showMessageDialog(null,"Password atau Username salah! Ulangi lagi"); + jTextField1.setText(""); + jPasswordField1.setText(""); + } + } + + public void sync() { + client.sync(); + Task = client.getTasks(); + + Object data[][]; + data = new Object[Task.size()][6]; + for (int i = 0; i < Task.size(); i++) { + data[i][0] = Task.get(i).getNama(); + data[i][1] = Task.get(i).getDeadline(); + data[i][2] = Task.get(i).getAssignee(); + data[i][3] = Task.get(i).getTag(); + data[i][4] = Task.get(i).isStatus(); + data[i][5] = Task.get(i).getKategori(); + } + jTable1.setModel(new javax.swing.table.DefaultTableModel( + data, + new Object[]{ + "Nama Tugas", "Deadline", "Assignee", "Tag", "Status", "Kategori" + }) { + + Class[] types = new Class[]{ + java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Object.class, java.lang.Boolean.class, java.lang.Object.class + }; + boolean[] canEdit = new boolean[]{ + false, false, false, false, true, false + }; + + public Class getColumnClass(int columnIndex) { + return types[columnIndex]; + } + }); + } + + public javax.swing.JTable getTable() { + return jTable1; + } + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton jButton1; + private javax.swing.JButton jButton2; + private javax.swing.JButton jButton3; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private javax.swing.JMenuItem jMenuItem1; + private javax.swing.JPasswordField jPasswordField1; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JTable jTable1; + private javax.swing.JTextField jTextField1; + private javax.swing.JPanel mainPanel; + private javax.swing.JMenuBar menuBar; + private javax.swing.JProgressBar progressBar; + private javax.swing.JLabel statusAnimationLabel; + private javax.swing.JLabel statusMessageLabel; + private javax.swing.JPanel statusPanel; + // End of variables declaration//GEN-END:variables + private final Timer messageTimer; + private final Timer busyIconTimer; + private final Icon idleIcon; + private final Icon[] busyIcons = new Icon[15]; + private int busyIconIndex = 0; + private JDialog aboutBox; + public int Pilihan; +} diff --git a/Tubes5-Progin/src/tubes5progin/resources/Alert.properties b/Tubes5-Progin/src/tubes5progin/resources/Alert.properties new file mode 100644 index 00000000..0f7bac8b --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/resources/Alert.properties @@ -0,0 +1,3 @@ +jLabel1.text=Username +jLabel2.text=Password +jButton1.text=Ok diff --git a/Tubes5-Progin/src/tubes5progin/resources/HalamanUtama.properties b/Tubes5-Progin/src/tubes5progin/resources/HalamanUtama.properties new file mode 100644 index 00000000..448e8a38 --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/resources/HalamanUtama.properties @@ -0,0 +1,16 @@ +# To change this template, choose Tools | Templates +# and open the template in the editor. + +editMenu.text=Edit +cutMenuItem.text=Cut +helpMenu.text=Help +deleteMenuItem.text=Delete +pasteMenuItem.text=Paste +copyMenuItem.text=Copy +saveMenuItem.text=Save +contentsMenuItem.text=Contents +saveAsMenuItem.text=Save As ... +aboutMenuItem.text=About +fileMenu.text=File +openMenuItem.text=Open +exitMenuItem.text=Exit diff --git a/Tubes5-Progin/src/tubes5progin/resources/Main.properties b/Tubes5-Progin/src/tubes5progin/resources/Main.properties new file mode 100644 index 00000000..2cdc95c0 --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/resources/Main.properties @@ -0,0 +1,2 @@ + +jTable1.columnModel.title0=Nama Tugas diff --git a/Tubes5-Progin/src/tubes5progin/resources/Tubes5ProginAboutBox.properties b/Tubes5-Progin/src/tubes5progin/resources/Tubes5ProginAboutBox.properties new file mode 100644 index 00000000..b76ddd5f --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/resources/Tubes5ProginAboutBox.properties @@ -0,0 +1,14 @@ +title = About: ${Application.title} ${Application.version} + +closeAboutBox.Action.text = &Close + +appDescLabel.text=<html>${Application.description} + +versionLabel.text=Product Version\: + +vendorLabel.text=Vendor\: + +homepageLabel.text=Homepage\: + +#NOI18N +imageLabel.icon=about.png diff --git a/Tubes5-Progin/src/tubes5progin/resources/Tubes5ProginApp.properties b/Tubes5-Progin/src/tubes5progin/resources/Tubes5ProginApp.properties new file mode 100644 index 00000000..7af8304a --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/resources/Tubes5ProginApp.properties @@ -0,0 +1,11 @@ +# Application global resources + +Application.name = Tubes5-Progin +Application.title = Basic Application Example +Application.version = 1.0 +Application.vendor = Sun Microsystems Inc. +Application.homepage = http\://appframework.dev.java.net/ +Application.description = A simple Java desktop application based on Swing Application Framework. +Application.vendorId = Sun +Application.id = ${Application.name} +Application.lookAndFeel = system diff --git a/Tubes5-Progin/src/tubes5progin/resources/Tubes5ProginView.properties b/Tubes5-Progin/src/tubes5progin/resources/Tubes5ProginView.properties new file mode 100644 index 00000000..dbf03362 --- /dev/null +++ b/Tubes5-Progin/src/tubes5progin/resources/Tubes5ProginView.properties @@ -0,0 +1,53 @@ + +# @Action resources + +showAboutBox.Action.text = &About... +showAboutBox.Action.shortDescription = Show the application's information dialog + +# status bar resources + +StatusBar.messageTimeout = 5000 +StatusBar.busyAnimationRate = 30 +StatusBar.idleIcon = busyicons/idle-icon.png +StatusBar.busyIcons[0] = busyicons/busy-icon0.png +StatusBar.busyIcons[1] = busyicons/busy-icon1.png +StatusBar.busyIcons[2] = busyicons/busy-icon2.png +StatusBar.busyIcons[3] = busyicons/busy-icon3.png +StatusBar.busyIcons[4] = busyicons/busy-icon4.png +StatusBar.busyIcons[5] = busyicons/busy-icon5.png +StatusBar.busyIcons[6] = busyicons/busy-icon6.png +StatusBar.busyIcons[7] = busyicons/busy-icon7.png +StatusBar.busyIcons[8] = busyicons/busy-icon8.png +StatusBar.busyIcons[9] = busyicons/busy-icon9.png +StatusBar.busyIcons[10] = busyicons/busy-icon10.png +StatusBar.busyIcons[11] = busyicons/busy-icon11.png +StatusBar.busyIcons[12] = busyicons/busy-icon12.png +StatusBar.busyIcons[13] = busyicons/busy-icon13.png +StatusBar.busyIcons[14] = busyicons/busy-icon14.png +OnClickOk.Action.text=aaaa +OnClickOk.Action.shortDescription= +jLabel1.text=Password +jTextField1.text= +jLabel2.text=Username +jLabel3.text=jLabel3 +jTable1.columnModel.title0=Title 1 +jTable1.columnModel.title3=Title 4 +jTable1.columnModel.title2=Title 3 +jTable1.columnModel.title1=Title 2 +jButton2.text=jButton2 +#NOI18N +mainPanel.background=0, 204, 51 +#NOI18N +mainPanel.foreground=0, 0, 0 +helpMenu.text=Help +# Resources for the Tubes5ProginView class + +# top-level menus +fileMenu.text=File +jButton3.text=Logout +jMenuItem1.text=Logout +jButton1.text=OK +#NOI18N +jTable1.background=153, 255, 153 +#NOI18N +jTable1.gridColor=204, 204, 204 diff --git a/Tubes5-Progin/src/tubes5progin/resources/about.png b/Tubes5-Progin/src/tubes5progin/resources/about.png new file mode 100644 index 00000000..c6dfe0a5 Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/about.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon0.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon0.png new file mode 100644 index 00000000..242c0c85 Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon0.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon1.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon1.png new file mode 100644 index 00000000..9f6f6343 Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon1.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon10.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon10.png new file mode 100644 index 00000000..c4ef4a1f Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon10.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon11.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon11.png new file mode 100644 index 00000000..6eca1f5e Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon11.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon12.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon12.png new file mode 100644 index 00000000..e447ee8a Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon12.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon13.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon13.png new file mode 100644 index 00000000..848a6f1a Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon13.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon14.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon14.png new file mode 100644 index 00000000..7b3561df Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon14.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon2.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon2.png new file mode 100644 index 00000000..c866e62a Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon2.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon3.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon3.png new file mode 100644 index 00000000..9be22fa5 Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon3.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon4.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon4.png new file mode 100644 index 00000000..f07c20dc Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon4.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon5.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon5.png new file mode 100644 index 00000000..653fc9c3 Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon5.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon6.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon6.png new file mode 100644 index 00000000..70355726 Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon6.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon7.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon7.png new file mode 100644 index 00000000..49fbc6ec Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon7.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon8.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon8.png new file mode 100644 index 00000000..e1a5a409 Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon8.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon9.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon9.png new file mode 100644 index 00000000..82780123 Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/busy-icon9.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/busyicons/idle-icon.png b/Tubes5-Progin/src/tubes5progin/resources/busyicons/idle-icon.png new file mode 100644 index 00000000..50312f85 Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/busyicons/idle-icon.png differ diff --git a/Tubes5-Progin/src/tubes5progin/resources/splash.png b/Tubes5-Progin/src/tubes5progin/resources/splash.png new file mode 100644 index 00000000..a1fbdc10 Binary files /dev/null and b/Tubes5-Progin/src/tubes5progin/resources/splash.png differ diff --git a/Tubes5-Progin/wilson_log.txt b/Tubes5-Progin/wilson_log.txt new file mode 100644 index 00000000..82900527 --- /dev/null +++ b/Tubes5-Progin/wilson_log.txt @@ -0,0 +1,4 @@ +update#15#false#1369035985466 +update#15#true#1369035989616 +update#15#false#1369036447465 +update#15#true#1369036459274