From cf54a14463e4acb8fbb2daca9e049f5162534e2d Mon Sep 17 00:00:00 2001 From: afik Date: Fri, 21 Nov 2014 11:46:44 +0700 Subject: [PATCH 01/69] intial project --- build/web/META-INF/MANIFEST.MF | 2 + .../WEB-INF/classes/.netbeans_automatic_build | 0 .../classes/.netbeans_update_resources | 0 build/web/WEB-INF/faces-config.xml | 7 + build/web/WEB-INF/glassfish-web.xml | 11 + build/web/WEB-INF/sun-web.xml | 11 + build/web/WEB-INF/web.xml | 24 + build/web/gfv3ee6.dpf | 11 + build/web/index.xhtml | 12 + nbproject/ant-deploy.xml | 111 ++ nbproject/build-impl.xml | 1441 +++++++++++++++++ nbproject/faces-config.NavData | 0 nbproject/genfiles.properties | 8 + nbproject/private/private.properties | 7 + nbproject/project.properties | 90 + nbproject/project.xml | 18 + src/conf/MANIFEST.MF | 2 + web/WEB-INF/faces-config.xml | 7 + web/WEB-INF/glassfish-web.xml | 11 + web/WEB-INF/web.xml | 24 + web/index.xhtml | 12 + 21 files changed, 1809 insertions(+) create mode 100644 build/web/META-INF/MANIFEST.MF create mode 100644 build/web/WEB-INF/classes/.netbeans_automatic_build create mode 100644 build/web/WEB-INF/classes/.netbeans_update_resources create mode 100644 build/web/WEB-INF/faces-config.xml create mode 100644 build/web/WEB-INF/glassfish-web.xml create mode 100644 build/web/WEB-INF/sun-web.xml create mode 100644 build/web/WEB-INF/web.xml create mode 100644 build/web/gfv3ee6.dpf create mode 100644 build/web/index.xhtml create mode 100644 nbproject/ant-deploy.xml create mode 100644 nbproject/build-impl.xml create mode 100644 nbproject/faces-config.NavData create mode 100644 nbproject/genfiles.properties create mode 100644 nbproject/private/private.properties create mode 100644 nbproject/project.properties create mode 100644 nbproject/project.xml create mode 100644 src/conf/MANIFEST.MF create mode 100644 web/WEB-INF/faces-config.xml create mode 100644 web/WEB-INF/glassfish-web.xml create mode 100644 web/WEB-INF/web.xml create mode 100644 web/index.xhtml diff --git a/build/web/META-INF/MANIFEST.MF b/build/web/META-INF/MANIFEST.MF new file mode 100644 index 00000000..59499bce --- /dev/null +++ b/build/web/META-INF/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/build/web/WEB-INF/classes/.netbeans_automatic_build b/build/web/WEB-INF/classes/.netbeans_automatic_build new file mode 100644 index 00000000..e69de29b diff --git a/build/web/WEB-INF/classes/.netbeans_update_resources b/build/web/WEB-INF/classes/.netbeans_update_resources new file mode 100644 index 00000000..e69de29b diff --git a/build/web/WEB-INF/faces-config.xml b/build/web/WEB-INF/faces-config.xml new file mode 100644 index 00000000..0393e360 --- /dev/null +++ b/build/web/WEB-INF/faces-config.xml @@ -0,0 +1,7 @@ + + + + diff --git a/build/web/WEB-INF/glassfish-web.xml b/build/web/WEB-INF/glassfish-web.xml new file mode 100644 index 00000000..4f5a531d --- /dev/null +++ b/build/web/WEB-INF/glassfish-web.xml @@ -0,0 +1,11 @@ + + + + /Simple_Blog + + + + Keep a copy of the generated servlet class' java code. + + + diff --git a/build/web/WEB-INF/sun-web.xml b/build/web/WEB-INF/sun-web.xml new file mode 100644 index 00000000..1ac7af40 --- /dev/null +++ b/build/web/WEB-INF/sun-web.xml @@ -0,0 +1,11 @@ + + + + + + + Keep a copy of the generated servlet class' java code. + + + + diff --git a/build/web/WEB-INF/web.xml b/build/web/WEB-INF/web.xml new file mode 100644 index 00000000..c5e7c738 --- /dev/null +++ b/build/web/WEB-INF/web.xml @@ -0,0 +1,24 @@ + + + + javax.faces.PROJECT_STAGE + Development + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + Faces Servlet + /faces/* + + + + 30 + + + + faces/index.xhtml + + diff --git a/build/web/gfv3ee6.dpf b/build/web/gfv3ee6.dpf new file mode 100644 index 00000000..4f5a531d --- /dev/null +++ b/build/web/gfv3ee6.dpf @@ -0,0 +1,11 @@ + + + + /Simple_Blog + + + + Keep a copy of the generated servlet class' java code. + + + diff --git a/build/web/index.xhtml b/build/web/index.xhtml new file mode 100644 index 00000000..c70ee58c --- /dev/null +++ b/build/web/index.xhtml @@ -0,0 +1,12 @@ + + + + + Facelet Title + + + Hello from Facelets + + + diff --git a/nbproject/ant-deploy.xml b/nbproject/ant-deploy.xml new file mode 100644 index 00000000..2d5f8778 --- /dev/null +++ b/nbproject/ant-deploy.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml new file mode 100644 index 00000000..16025756 --- /dev/null +++ b/nbproject/build-impl.xml @@ -0,0 +1,1441 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set build.web.dir + Must set build.generated.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.war + + + + + + + + + +The Java EE server classpath is not correctly set up - server home directory is missing. +Either open the project in the IDE and assign the server or setup the server classpath manually. +For example like this: + ant -Dj2ee.server.home=<app_server_installation_directory> + + +The Java EE server classpath is not correctly set up. Your active server type is ${j2ee.server.type}. +Either open the project in the IDE and assign the server or setup the server classpath manually. +For example like this: + ant -Duser.properties.file=<path_to_property_file> (where you put the property "j2ee.platform.classpath" in a .properties file) +or ant -Dj2ee.platform.classpath=<server_classpath> (where no properties file is used) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +The libs.CopyLibs.classpath property is not set up. +This property must point to +org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part +of NetBeans IDE installation and is usually located at +<netbeans_installation>/java<version>/ant/extra folder. +Either open the project in the IDE and make sure CopyLibs library +exists or setup the property manually. For example like this: + ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + Must select a file in the IDE or set jsp.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Browser not found, cannot launch the deployed application. Try to set the BROWSER environment variable. + + + Launching ${browse.url} + + + + + + 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + 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 test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/faces-config.NavData b/nbproject/faces-config.NavData new file mode 100644 index 00000000..e69de29b diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties new file mode 100644 index 00000000..ee6fbc76 --- /dev/null +++ b/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=8950f2de +build.xml.script.CRC32=3bca006e +build.xml.stylesheet.CRC32=651128d4@1.67.1.1 +# 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=8950f2de +nbproject/build-impl.xml.script.CRC32=8df462ce +nbproject/build-impl.xml.stylesheet.CRC32=99ea4b56@1.67.1.1 diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties new file mode 100644 index 00000000..9921af67 --- /dev/null +++ b/nbproject/private/private.properties @@ -0,0 +1,7 @@ +deploy.ant.properties.file=C:\\Users\\Afik\\AppData\\Roaming\\NetBeans\\8.0\\config\\GlassFishEE6\\Properties\\gfv3-968141306.properties +j2ee.platform.is.jsr109=true +j2ee.server.domain=C:/Users/Afik/AppData/Roaming/NetBeans/8.0/config/GF_4.0/domain1 +j2ee.server.home=C:/Program Files/glassfish-4.0/glassfish +j2ee.server.instance=[C:\\Program Files\\glassfish-4.0\\glassfish;C:\\Program Files\\glassfish-4.0\\glassfish\\domains\\domain1]deployer:gfv3ee6:localhost:4848 +j2ee.server.middleware=C:/Program Files/glassfish-4.0 +user.properties.file=C:\\Users\\Afik\\AppData\\Roaming\\NetBeans\\8.0\\build.properties diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 00000000..57320ba9 --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,90 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=true +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +auxiliary.org-netbeans-modules-projectapi.jsf_2e_language=Facelets +build.classes.dir=${build.web.dir}/WEB-INF/classes +build.classes.excludes=**/*.java,**/*.form +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +build.web.dir=${build.dir}/web +build.web.excludes=${build.classes.excludes} +client.urlPart= +compile.jsps=false +conf.dir=${source.root}/conf +debug.classpath=${build.classes.dir}:${javac.classpath} +debug.test.classpath=\ + ${run.test.classpath} +display.browser=true +# Files to be excluded from distribution war +dist.archive.excludes= +dist.dir=dist +dist.ear.war=${dist.dir}/${war.ear.name} +dist.javadoc.dir=${dist.dir}/javadoc +dist.war=${dist.dir}/${war.name} +endorsed.classpath=\ + ${libs.javaee-endorsed-api-6.0.classpath} +excludes= +includes=** +j2ee.compile.on.save=true +j2ee.copy.static.files.on.save=true +j2ee.deploy.on.save=true +j2ee.platform=1.7-web +j2ee.platform.classpath=${j2ee.server.middleware}/mq/lib/jaxm-api.jar:${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar +j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar +j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar +j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api-osgi.jar +j2ee.platform.wsimport.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api-osgi.jar +j2ee.platform.wsit.classpath= +j2ee.server.type=gfv3ee6 +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.debug=true +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.7 +javac.target=1.7 +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.preview=true +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +lib.dir=${web.docbase.dir}/WEB-INF/lib +no.dependencies=false +persistence.xml.dir=${conf.dir} +platform.active=default_platform +resource.dir=setup +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +# Space-separated list of JVM arguments used when running a class with a main method or a unit test +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value): +runmain.jvmargs= +source.encoding=UTF-8 +source.root=src +src.dir=${source.root}/java +test.src.dir=test +war.content.additional= +war.ear.name=${war.name} +war.name=Simple_Blog.war +web.docbase.dir=web +webinf.dir=web/WEB-INF diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 00000000..cdc0bc42 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,18 @@ + + + org.netbeans.modules.web.project + + + Simple Blog + 1.6.5 + + + + + + + + + + + diff --git a/src/conf/MANIFEST.MF b/src/conf/MANIFEST.MF new file mode 100644 index 00000000..59499bce --- /dev/null +++ b/src/conf/MANIFEST.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/web/WEB-INF/faces-config.xml b/web/WEB-INF/faces-config.xml new file mode 100644 index 00000000..0393e360 --- /dev/null +++ b/web/WEB-INF/faces-config.xml @@ -0,0 +1,7 @@ + + + + diff --git a/web/WEB-INF/glassfish-web.xml b/web/WEB-INF/glassfish-web.xml new file mode 100644 index 00000000..4f5a531d --- /dev/null +++ b/web/WEB-INF/glassfish-web.xml @@ -0,0 +1,11 @@ + + + + /Simple_Blog + + + + Keep a copy of the generated servlet class' java code. + + + diff --git a/web/WEB-INF/web.xml b/web/WEB-INF/web.xml new file mode 100644 index 00000000..c5e7c738 --- /dev/null +++ b/web/WEB-INF/web.xml @@ -0,0 +1,24 @@ + + + + javax.faces.PROJECT_STAGE + Development + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + Faces Servlet + /faces/* + + + + 30 + + + + faces/index.xhtml + + diff --git a/web/index.xhtml b/web/index.xhtml new file mode 100644 index 00000000..c70ee58c --- /dev/null +++ b/web/index.xhtml @@ -0,0 +1,12 @@ + + + + + Facelet Title + + + Hello from Facelets + + + From ad7307389ccdae2dfb490ecc59cdc7c3a6527e7d Mon Sep 17 00:00:00 2001 From: afik Date: Fri, 21 Nov 2014 11:48:21 +0700 Subject: [PATCH 02/69] initial project --- assets/css/screen.css | 861 ----------------------------------------- assets/img/favicon.ico | Bin 799 -> 0 bytes assets/img/pre.png | Bin 78 -> 0 bytes index.html | 114 ------ new_post.html | 111 ------ post.html | 140 ------- readme.md | 39 -- 7 files changed, 1265 deletions(-) delete mode 100644 assets/css/screen.css delete mode 100644 assets/img/favicon.ico delete mode 100644 assets/img/pre.png delete mode 100644 index.html delete mode 100644 new_post.html delete mode 100644 post.html delete mode 100644 readme.md diff --git a/assets/css/screen.css b/assets/css/screen.css deleted file mode 100644 index 1d8fdf3b..00000000 --- a/assets/css/screen.css +++ /dev/null @@ -1,861 +0,0 @@ -@import url(http://fonts.googleapis.com/css?family=Open+Sans); -@import url(http://fonts.googleapis.com/css?family=Questrial); - -/* Reset & Basics (Inspired by E. Meyers) -================================================== */ -html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, address, cite, code, em, img, small, strong, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, embed, figure, figcaption, footer, header, hgroup, menu, nav, section, summary, time, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; } -article, aside, details, figcaption, figure, footer, header, hgroup, menu, time, nav, section { - display: block; } -html, body, .wrapper { - min-height: 100%; -} - - -/* Body -================================================== */ -html, body { - height: 100%; -} -.wrapper { - min-height: 100%; -} -body { - overflow-x: hidden; - font: 17px/28px ff-meta-serif-web-pro, "Georgia", serif; - color: #333; - background: #fff; -} - - -/* Typography -================================================== */ -h1, h2, h3, h4, h5, h6 { - font-family: "proxima-nova", "helvetica neue", "helvetica", sans-serif; - font-weight: normal; - text-transform: uppercase; - font-weight: 700; - color: #000; - text-rendering: optimizeLegibility; -} - -h1 { - font-size: 50px; - padding-bottom: 30px; -} - -h2 { - font-size: 45px; - padding-bottom: 25px; -} - -h3 { - font-size: 40px; - padding-bottom: 20px; -} - -h4 { - font-size: 35px; - padding-bottom: 15px; -} - -h5 { - font-size: 30px; - padding-bottom: 10px; -} - -p { - margin: 0 0 28px 0; -} - -strong { - font-weight: bold; -} -em { - font-style: italic; -} -sup { - line-height: 0; -} - -small { - font-size: 70%; -} - -cite { - font-size: 80%; - font-style: italic; - } - -/* Teaser -================================================== */ - -header#teaser h1 { - text-transform: none !important; - color: #333; - font-size: 28px !important; - font-weight: 300 !important; -} - - -/* Links -================================================== */ -a { - color: #F40034; - text-decoration: none; - -webkit-transition: color .2s ease-in-out; - -moz-transition: color .2s ease-in-out; - transition: color .2s ease-in-out; -} -a:hover { - color: #F40034; -} - -/* Layout -================================================== */ -/* White container that is the "page" */ -.wrapper { - max-width: 1500px; - margin: 0 auto; - background: #fff; -} - -/* Containers to keep content to a set width */ -.nav, -.art-header-inner, -.footer, -.art-list, -.abt, -.fourohfour { - width: 980px; -} -.nav, -.art-body-inner, -.footer, -.art-list, -.abt, -.fourohfour { - position: relative; - margin: 0 auto; -} - -/* Nav -================================================== */ -.nav { - position: absolute; - top: 0; - left: 50%; - height: 70px; - padding-top: 40px; - margin-left: -490px; /* Half width of nav */ - border-bottom: 1px solid #333; - z-index: 2; -} -.nav.fixed { - position: fixed; -} -#logo { - float: left; -} -.nav-primary { - float: right; -} -.nav-primary li { - display: inline-block; - margin-left: 10px; - font-weight: 500; -} -#logo h1, -.nav-primary li, -.nav-primary li a { - font-family: "proxima-nova", "helvetica neue", "helvetica", sans-serif; - font-weight: 700; - font-size: 13px; - line-height: 30px; - color: #000; - text-transform: uppercase; -} - -#logo h1 { - height: 30px; - margin-left: 0px; - letter-spacing: 1px; - font-family: 'Questrial', sans-serif; - font-size: 30px; -} - -#logo h1 span{ - color: #F40034 !important; -} - -.nav li:first-child { - margin-left: 0; /* Remove left margin from the first nav li */ -} - -/* Home Page -================================================== */ - -div#home {} - -#home > div.cover { - max-width: 980px; - margin: 0px auto; - /*padding-top: 110px;*/ -} - -div.cover { - -} - -div.cover > img { - width: 100%; - height: 100%; -} - - -/* Article -================================================== */ -.art { - margin-top: -131px; -} -/* Header */ -.art-header { - height: 900px; - /* Background image is defined in the post */ - background-position: top center; - background-attachment: fixed; - overflow: hidden; -} -/* Contains the time, title and subtitle for an article */ -.art-header-inner { - position: fixed; - top: 300px; - left: 50%; - margin-left: -490px; -} -.art-time, -.art-title, -.art-subtitle { - text-align: center; - text-transform: uppercase; -} -.art-time { - font-size: 14px; - line-height: 1.8; - letter-spacing: 4px; -} -.art-title { - font-size: 100px; - line-height: .9; - letter-spacing: -2px; - width: 100%; -} -.art-subtitle { - margin-top: 4px; - font-size: 14px; - line-height: 1.3; - letter-spacing: 4px; -} - -/* If small header, make few adjustments */ -.small .art-title { - font-size: 70px; - line-height: 65px; -} -.small.art-header-inner { - top: 320px; -} - -/* Body */ -.art-body { - position: relative; - width: 100%; - background: #fff; - z-index: 100; - -webkit-box-shadow: 0 -3px 3px rgba(0,0,0,.2); - -moz-box-shadow: 0 -3px 3px rgba(0,0,0,.2); - box-shadow: 0 -3px 3px rgba(0,0,0,.2); -} -.art-body-inner { - font-family: Georgia,Cambria,"Times New Roman",Times,serif; - max-width: 640px; - padding: 80px 0 50px; - letter-spacing: 0.01rem; - font-weight: 400; - font-style: normal; - font-size: 21px; - line-height: 1.5; -} -.art-body-inner a:hover { - border-bottom: 1px solid #F40034; - padding-bottom:2px; -} -.art-body-inner ul, -.art-body-inner ol { /* For lists in the article body */ - margin-bottom: 26px; -} -.art-body-inner ul li { - list-style: disc; -} - -.art-body-inner mark { - background-color: #fdffb6; - padding: 2px; - -webkit-box-shadow: #fdffb6 0 0 5px; - -moz-box-shadow: #fdffb6 0 0 5px; - box-shadow: #fdffb6 0 0 5px; -} - -.art-body-inner blockquote { - font-size: 16px; - background: #f9f9f9; - border-left: 10px solid #ccc; - margin: 1.5em 10px; - padding: 0.5em 10px; - quotes: "\201C""\201D""\2018""\2019"; -} - -.art-body-inner blockquote p:first-child:before { - color: #ccc; - content: "“"; - font-size: 4em; - line-height: 0.1em; - margin-right: 0.25em; - vertical-align: -0.4em; -} - -.art-body-inner blockquote p { - margin-bottom: 1.5em; -} - -.art-body-inner blockquote p:last-child { - margin-bottom: 0; -} - - -.dropcap { /* First character on articles */ - float: left; - margin: 47px 10px 20px 0; - font-size: 100px; - line-height: 0; -} -.art-subhead { /* Subheads are used to break up sections of an article */ - margin: 60px 0 15px; - font-size: 20px; - line-height: 28px; - letter-spacing: 3px; -} -.callout { /* Callouts are like large pullquotes */ - font-weight: bold; -} -.art-body-inner img { - max-width: 100%; - max-height: 600px; - margin-bottom: 26px; -} -.art-body-inner img.center { - display: block; - margin-left: auto; - margin-right: auto; -} -.art-body-inner .art-reference { - font-size: 80%; - color: #999; - margin-top: 50px; -} - -/* For simple, white background posts */ -.simple .art-body { - background: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - - -/* List of Articles -================================================== */ -.art-list { - padding: 120px 0 0; -} -.art-list-body { - position: relative; - overflow: hidden; -} -.art-list-item { - padding: 40px 0; - list-style: none; - overflow: hidden; - border-bottom: 1px solid #ccc; -} -.art-list-item:last-child { - border-bottom: none; -} -.art-list-title { - font-size: 26px; - line-height: 26px; - font-weight: 700; -} -.art-list-item-title-and-time { - float: left; - width: 30%; - margin-bottom: 10px; -} -.art-list-time { - font-size: 12px; - line-height: 20px; - letter-spacing: 2px; - text-transform: uppercase; - color: #999; -} -.art-list-title a { - color: #000; -} -.art-list-title a:hover { - color: #F40034; -} -.art-list-item p { - width: 65%; - float: left; - margin-left: 5%; - margin-bottom: 0; - font-size: 16px; - line-height: 24px; -} - - -/* Footer -================================================== */ -.footer { - padding: 30px 0 40px; - overflow: hidden; - border-top: 1px solid #ccc; -} -.footer, -.footer a { - font-family: "proxima-nova", "helvetica neue", "helvetica", sans-serif; - font-size: 13px; - text-transform: uppercase; - color: #777; -} -.footer a:hover { - color: #000; -} -.back-to-top, -.footer-nav, -.offsite-links { - width: 45%; - float: left; -} -.psi { - width:10%; - float:left; - text-align: center; -} -.footer-nav { - text-align: center; -} -.offsite-links { - text-align: right; -} -.footer .twitter-link:hover { - color: #0084B4; -} -.footer .instagram-link:hover { - color: #3F729B; -} -.footer .github-link:hover { - color: #c5376d; -} -.footer .caffein8-link:hover{ - color: black; -} -.footer .rss-link:hover { - color: #e85d24; -} -/* Remove prev & next links on loop */ -.art-list + .footer .footer-nav, -.abt + .footer .footer-nav { - text-indent: -9999px; - text-align: left; -} - - -/* White Reverse Theme -================================================== */ -/* Nav */ -.nav.white { - border-bottom-color: #fff; - border-bottom-color: rgba(255,255,255,.3); -} -.nav.white li a, -.nav.white li, -.nav.white #logo h1 { - color: #fff; - text-shadow: 0 0 8px rgba(0,0,0,.5); -} -.nav.white #logo h1 { - background-position: top center; -} - -nav.pagination{ - text-align: right; - padding-bottom: 25px; -} -/* Art header */ -.art-header.white { - background-color: #111; -} -.art-header.white .art-time, -.art-header.white .art-title, -.art-header.white .art-subtitle { - color: #fff; - text-shadow: 0 0 8px rgba(0,0,0,.5); -} - - -/* About page -================================================== */ -.abt { - padding: 200px 0 100px; - list-style: none; -} -.abt .abt-header { - font-size: 140px; - line-height: 1; - text-transform: none; -} -.abt .abt-subheader { - font-size: 24px; - font-style: italic; - text-transform: none; - color: #777; -} -.abt-body { - -moz-column-count: 2; - -moz-column-gap: 20px; - -webkit-column-count: 2; - -webkit-column-gap: 20px; - margin-bottom: 28px; -} -.abt-signoff { - line-height: 1.3; - font-style: italic; - color: #777; -} - -/* 404 page -================================================== */ -.fourohfour { - padding: 240px 0 100px; - text-align: center; -} - -/* Code -================================================== */ - -code, tt { -background: #ededee; -color: #3C4043; -font-size: 90%; -padding: 1px 3px; -} - -pre { - width: 92%; - overflow: auto; - margin: 2rem 0; - padding: 1rem 0.8rem 1rem 1.2rem; - color: #3f3b36; - border: 1px solid #ccc; - border-left: 1rem solid #ccc; - font: lighter 1.2rem/2rem monospace; - background: url(/assets/img/pre.png) repeat 0 -0.9rem; - background-size: 1px 4rem; -} - -pre code, tt { -font-size: inherit; -white-space: -moz-pre-wrap; -white-space: pre-wrap; -background: transparent; -border: none; -padding: 0; -} - - -.gist { - font-size: 14px; -} - - -/* Responsive -================================================== */ -@media only screen and (max-width: 1080px) { - /* Set all of the 980 containers to flexible width */ - .nav, - .art-body-inner, - .art-header-inner, - .footer, - .art-list, - .abt, - .fourohfour { - width: 90%; - } - .nav, - .art-header-inner { - margin-left: -45%; - } -} - -@media only screen and (max-width: 1024px) { - /* Everything becomes scrolling and non-fading */ - .nav, - .nav.fixed { - position: relative; - opacity: 1 !important; /* Important to override JS values */ - display: inline-block; - } - .art-header-inner { - position: relative; - top: 0 !important; /* Important to override JS values */ - margin-top: 240px !important; /* Important to override JS values */ - opacity: 1 !important; /* Important to override JS values */ - } - /* Articles no longer have fixed heights */ - .art-header { - height: auto; - padding-bottom: 100px; - background-size: cover !important; - background-attachment: scroll; - } - /* Remove bottom space out if articles doesn't have a background */ - .simple .art-header { - padding-bottom: 0; - } - .art-list { - padding-top: 0; - } - .abt { - padding: 40px 0; - } - .fourohfour { - padding: 80px 0 60px; - } -} - -@media only screen and (max-width: 780px) { - .art-body-inner ul, - .art-body-inner ol { - margin-left: 20px; - } - .art-title { - letter-spacing: 0; - } - .art-subtitle, - .art-time { - font-size: 12px; - } - .nav { - padding-top: 25px; - height: 55px; - } - .art-list-item-title-and-time, - .art-list-item p { - float: none; - width: auto; - margin-left: 0; - } - .abt-body { - -moz-column-count: 1; - -webkit-column-count: 1; - } -} - -@media only screen and (max-width: 500px) { - .nav-primary li { - margin-left: 10px; - } - .nav #logo h1 { - font-size: 16px; - letter-spacing: -1px; - } - .nav li a { - font-size: 12px; - } - .art-header { - padding-bottom: 50px; - } - .art-header-inner { - margin-top: 190px !important; - } - .art-body-inner { - padding-top: 30px; - } - body { - font-size: 15px; - line-height: 24px; - } - p { - margin-bottom: 24px; - } - .footer { - padding: 10px 0 20px; - } - .back-to-top, - .footer-nav { - width: 50%; - } - .back-to-top { - text-align: left; - } - .footer-nav { - text-align: right; - } - .offsite-links { - float: left; - width: 100%; - text-align: left; - } - .offsite-links a { - font-size: 12px; - } - .art-list + .footer .footer-nav { - display: none; - } - .abt .abt-header { - font-size: 80px; - } - .abt .abt-subheader { - font-size: 18px; - } -} - - -/* Misc -================================================== */ -::selection { - background: #000; - color: #fff; -} -::-moz-selection { - background: #000; - color: #fff; -} -img.left { - float: left; - margin-right: 20px; -} -img.right { - float: right; - margin-left: 20px; -} -/* Clearfixing pile */ -.nav:before, -.art-body-inner:before, -.footer:before, -.art-list:before { - content:""; - display:table; -} -.nav:after, -.art-body-inner:after, -.footer:after, -.art-list:after { - clear:both; -} -.nav, -.art-body-inner, -.footer, -.art-list { - zoom:1; /* For IE 6/7 (trigger hasLayout) */ -} - - -@-webkit-keyframes le-fade { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } -} -@-moz-keyframes le-fade { - 0% { - opacity: 0; - } - 100% { - opacity: 1; - } -} - -.art-header-inner { - -webkit-animation: le-fade .5s 0 1 ease-out; - -moz-animation: le-fade .5s 0 1 ease-out; -} - -.art-list, -.nav, -.abt, -.art-body { - -webkit-animation: le-fade .5s 0s 1 ease-out; - -moz-animation: le-fade .5s 0s 1 ease-out; -} - -hr.featured-article { - padding: 0; - border: none; - border-top: medium double #bbb; - color: #bbb; - text-align: center; -} -hr.featured-article:after { - content: "✭ Featured Article ✭"; - display: inline-block; - position: relative; - top: -0.8em; - font-size: 1.2em; - padding: 0 0.6em; - background: white; -} - -/* FORM */ - -#contact-area { - width: 600px; - margin-top: 25px; -} - -#contact-area input, #contact-area textarea { - padding: 5px; - width: 471px; - font-family: Helvetica, sans-serif; - margin: 0px 0px 10px 0px; - border: 2px solid #ccc; -} - -#contact-area textarea { - height: 90px; -} - -#contact-area textarea:focus, #contact-area input:focus { - border: 2px solid #900; -} - -#contact-area input.submit-button { - width: 100px; - -} - -label { - float: left; - text-align: right; - margin-right: 15px; - width: 100px; - padding-top: 5px; -} \ No newline at end of file diff --git a/assets/img/favicon.ico b/assets/img/favicon.ico deleted file mode 100644 index 40b40ed345847af1db325abe295a4d7c33cc51d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 799 zcmZ?wbhEHbRA5kGc$UeqZ{NPZfB)9j)^6Us`Olv}|Ni~^`SWLYcXw)Ps)K`rqod=Z zMT^$0Ti4v&eCN)c-@kvqef!qi+dDKg^!@wyU%q@%RaG@NH($Pd`GN%tl9G}xUc6XR zQu6E9FLibGuV25udiCn{>(}4Ee~*cY`SIh2tE=m-UAqn)I`rbji{9SeckkZKojdp0 zvuEz^?gtJWP*G9YxN+mzvuFMM{GL2{qNu1iW5$g8_wN@K6&V>BZQHi(@#DvNd3lzW zmLEQRxPANf_U+p*UAlDo^y%p6==k{fH*el_bab?~wpLVBeE$47J3IUC-Mhxd#!Hqg z@$m34Gc(J{$+Z^ zfgzJY2V@Q?P8it#H)J+7x3spkcXW1jck-(-hw?JH@v`)EtEXqoo}E5zdY96i*(uFN zj0-Y3q?&aXr)xJUr*kZjNcUQi$uByGv)MHxowvt!Rt9@B(;SH=f#c~~U98q~HZ(=d zNo?X+@6f5SID?ZlQ)UiZror)R3hjJv=A>l?%&`{^ew41l*Dk;$_GoTkf%6J>Eil=TJ#E=(?aY;SM|LZ4G}!4c(8v)yZsj{E+;CCD xp^pWP3S4uv5|&mxacW8Syewc*%yzV+uO-MJ;ZQ - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Simple Blog - - - - - -
- - - -
-
- -
-
- - - -
- - - - - - - - \ No newline at end of file diff --git a/new_post.html b/new_post.html deleted file mode 100644 index fc4e18ee..00000000 --- a/new_post.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Simple Blog | Tambah Post - - - - - -
- - - -
- - -

-

- -
-
-

Tambah Post

- -
-
- - - - - - -
- - - -
-
-
-
- -
- - - -
- - - - - - - - \ No newline at end of file diff --git a/post.html b/post.html deleted file mode 100644 index c0b6f9e6..00000000 --- a/post.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Simple Blog | Apa itu Simple Blog? - - - - - -
- - - -
- -
-
- -

Apa itu Simple Blog?

-

-
-
- -
-
-
-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Blanditiis aliquam minus consequuntur amet nulla eius, neque beatae, nostrum possimus, officiis eaque consectetur. Sequi sunt maiores dolore, illum quidem eos explicabo! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Magnam consequuntur consequatur molestiae saepe sed, incidunt sunt inventore minima voluptatum adipisci hic, est ipsa iste. Nobis, aperiam provident quae. Reprehenderit, iste.

-

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Asperiores animi tenetur nam delectus eveniet iste non culpa laborum provident minima numquam excepturi rem commodi, officia accusamus eos voluptates obcaecati. Possimus?

- -
- -

Komentar

- -
-
- - - - - - -
- - - -
-
- -
    -
  • -
    -

    Jems

    -
    2 menit lalu
    -
    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Perferendis repudiandae quae natus quos alias eos repellendus a obcaecati cupiditate similique quibusdam, atque omnis illum, minus ex dolorem facilis tempora deserunt! …

    -
  • - -
  • -
    -

    Kave

    -
    1 jam lalu
    -
    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Perferendis repudiandae quae natus quos alias eos repellendus a obcaecati cupiditate similique quibusdam, atque omnis illum, minus ex dolorem facilis tempora deserunt! …

    -
  • -
-
-
- -
- - - -
- - - - - - - - \ No newline at end of file diff --git a/readme.md b/readme.md deleted file mode 100644 index 5e7e48f5..00000000 --- a/readme.md +++ /dev/null @@ -1,39 +0,0 @@ -# Simple Blog Java - -Tugas 2 IF3110. - -![Simple Blog](http://i655.photobucket.com/albums/uu275/sonnylazuardi/ss-5.jpg) - -## Deskripsi - -Gunakan template ini untuk membuat sebuah blog sederhana dengan menggunakan bahasa pemrograman PHP. - -## Spesifikasi - -Spesifikasi untuk Tugas II IF3110 dapat diakses pada pranala berikut: - -https://www.dropbox.com/sh/ig1hf108ad9fqxi/AAA2PMjPFICSFo3ypdrHl39La?dl=0 - -## Deliverable - -Tiap-tiap Kelompok Membuat Organizationnya masing-masing, dengan langkah: - -1. Klik tanda Tambah disamping username pada Github, Pilih Create New Organization - -2. Buat Organisasi dengan Nama : IF3110-II-Nomor_Kelompok . Nomor Kelompok dapat diakses [disini](https://docs.google.com/spreadsheets/d/1Y-FGJ_feIVYNRv-o0ycBXyfAiKMFXKA17cvw3Mhjd1A/edit?usp=sharing) - -3. Masukkan email address salah satu anggota untuk billing email ( bebas ). - -4. Undang anggota kelompok untuk menjadi anggota Organisasi. - -5. Lakukan Fork Repository ini ke Organisasi yang baru dibentuk - -6. Setelah selesai mengerjakan, lakukan Pull Request. - -## Lisensi - -© 2014 Asisten IF3110 - -Yogi | [Sonny](http://github.com/sonnylazuardi) | Fathan | Renusa | Kelvin | Yanuar - -Dosen: [Yudistira Dwi Wardhana](http://github.com/yudis) \ No newline at end of file From a308f2404fb9433d988b3f09336e7ed57518d513 Mon Sep 17 00:00:00 2001 From: afik Date: Fri, 21 Nov 2014 12:03:53 +0700 Subject: [PATCH 03/69] add model --- src/java/model/jjhj.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/java/model/jjhj.java diff --git a/src/java/model/jjhj.java b/src/java/model/jjhj.java new file mode 100644 index 00000000..ffd557da --- /dev/null +++ b/src/java/model/jjhj.java @@ -0,0 +1,15 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package model; + +/** + * + * @author Afik + */ +public class jjhj { + +} From 8856a48e518e6eea61f6c5a4ead809d5be020f9c Mon Sep 17 00:00:00 2001 From: afik Date: Fri, 21 Nov 2014 13:35:33 +0700 Subject: [PATCH 04/69] add base --- web/List-User.xhtml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 web/List-User.xhtml diff --git a/web/List-User.xhtml b/web/List-User.xhtml new file mode 100644 index 00000000..c627c249 --- /dev/null +++ b/web/List-User.xhtml @@ -0,0 +1,16 @@ + + + + + TODO supply a title + + + + +
TODO write content
+ + From 6ae0548f426bd7244b862e4264ab7022a6372f71 Mon Sep 17 00:00:00 2001 From: afik Date: Fri, 21 Nov 2014 13:39:33 +0700 Subject: [PATCH 05/69] add database schema --- src/java/resource/database.sql | 71 ++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/java/resource/database.sql diff --git a/src/java/resource/database.sql b/src/java/resource/database.sql new file mode 100644 index 00000000..59d3abc0 --- /dev/null +++ b/src/java/resource/database.sql @@ -0,0 +1,71 @@ +-- phpMyAdmin SQL Dump +-- version 4.1.6 +-- http://www.phpmyadmin.net +-- +-- Host: 127.0.0.1 +-- Generation Time: 21 Nov 2014 pada 07.38 +-- Versi Server: 5.5.36 +-- PHP Version: 5.4.25 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; + +-- +-- Database: `simple_blog_2` +-- + +-- -------------------------------------------------------- + +-- +-- Struktur dari tabel `entries` +-- + +CREATE TABLE IF NOT EXISTS `entries` ( + `PID` int(11) NOT NULL AUTO_INCREMENT, + `JUDUL` text NOT NULL, + `TANGGAL` date NOT NULL, + `KONTEN` text NOT NULL, + PRIMARY KEY (`PID`), + UNIQUE KEY `PID` (`PID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Struktur dari tabel `komentar` +-- + +CREATE TABLE IF NOT EXISTS `komentar` ( + `PID` int(11) NOT NULL, + `KID` int(11) NOT NULL AUTO_INCREMENT, + `NAMA` varchar(50) NOT NULL, + `EMAIL` varchar(50) NOT NULL, + `TANGGAL` date NOT NULL, + `KOMENTAR` text NOT NULL, + PRIMARY KEY (`KID`), + UNIQUE KEY `KID` (`KID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Struktur dari tabel `user` +-- + +CREATE TABLE IF NOT EXISTS `user` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `USERNAME` varchar(20) NOT NULL, + `PASSWORD` varchar(20) NOT NULL, + `ROLE` text NOT NULL, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; From e602a3cf03d0424d41ab7ef259279c0d2cfe5962 Mon Sep 17 00:00:00 2001 From: afik Date: Fri, 21 Nov 2014 18:35:00 +0700 Subject: [PATCH 06/69] edit initial --- src/java/resource/database.sql | 71 ++++++++++++ web/Add-Post.xhtml | 16 +++ web/Delete-Post.xhtml | 16 +++ web/Edit-Post.xhtml | 16 +++ web/List-Post.xhtml | 16 +++ web/Login.xhtml | 16 +++ web/Publish-Post.xhtml | 16 +++ web/View-Post.xhtml | 16 +++ web/css/blog-old-ie.css | 191 +++++++++++++++++++++++++++++++++ web/css/blog.css | 175 ++++++++++++++++++++++++++++++ web/index.xhtml | 166 ++++++++++++++++++++++++++-- 11 files changed, 709 insertions(+), 6 deletions(-) create mode 100644 src/java/resource/database.sql create mode 100644 web/Add-Post.xhtml create mode 100644 web/Delete-Post.xhtml create mode 100644 web/Edit-Post.xhtml create mode 100644 web/List-Post.xhtml create mode 100644 web/Login.xhtml create mode 100644 web/Publish-Post.xhtml create mode 100644 web/View-Post.xhtml create mode 100644 web/css/blog-old-ie.css create mode 100644 web/css/blog.css diff --git a/src/java/resource/database.sql b/src/java/resource/database.sql new file mode 100644 index 00000000..59d3abc0 --- /dev/null +++ b/src/java/resource/database.sql @@ -0,0 +1,71 @@ +-- phpMyAdmin SQL Dump +-- version 4.1.6 +-- http://www.phpmyadmin.net +-- +-- Host: 127.0.0.1 +-- Generation Time: 21 Nov 2014 pada 07.38 +-- Versi Server: 5.5.36 +-- PHP Version: 5.4.25 + +SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; + +-- +-- Database: `simple_blog_2` +-- + +-- -------------------------------------------------------- + +-- +-- Struktur dari tabel `entries` +-- + +CREATE TABLE IF NOT EXISTS `entries` ( + `PID` int(11) NOT NULL AUTO_INCREMENT, + `JUDUL` text NOT NULL, + `TANGGAL` date NOT NULL, + `KONTEN` text NOT NULL, + PRIMARY KEY (`PID`), + UNIQUE KEY `PID` (`PID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Struktur dari tabel `komentar` +-- + +CREATE TABLE IF NOT EXISTS `komentar` ( + `PID` int(11) NOT NULL, + `KID` int(11) NOT NULL AUTO_INCREMENT, + `NAMA` varchar(50) NOT NULL, + `EMAIL` varchar(50) NOT NULL, + `TANGGAL` date NOT NULL, + `KOMENTAR` text NOT NULL, + PRIMARY KEY (`KID`), + UNIQUE KEY `KID` (`KID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Struktur dari tabel `user` +-- + +CREATE TABLE IF NOT EXISTS `user` ( + `ID` int(11) NOT NULL AUTO_INCREMENT, + `USERNAME` varchar(20) NOT NULL, + `PASSWORD` varchar(20) NOT NULL, + `ROLE` text NOT NULL, + PRIMARY KEY (`ID`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; + +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/web/Add-Post.xhtml b/web/Add-Post.xhtml new file mode 100644 index 00000000..c627c249 --- /dev/null +++ b/web/Add-Post.xhtml @@ -0,0 +1,16 @@ + + + + + TODO supply a title + + + + +
TODO write content
+ + diff --git a/web/Delete-Post.xhtml b/web/Delete-Post.xhtml new file mode 100644 index 00000000..c627c249 --- /dev/null +++ b/web/Delete-Post.xhtml @@ -0,0 +1,16 @@ + + + + + TODO supply a title + + + + +
TODO write content
+ + diff --git a/web/Edit-Post.xhtml b/web/Edit-Post.xhtml new file mode 100644 index 00000000..c627c249 --- /dev/null +++ b/web/Edit-Post.xhtml @@ -0,0 +1,16 @@ + + + + + TODO supply a title + + + + +
TODO write content
+ + diff --git a/web/List-Post.xhtml b/web/List-Post.xhtml new file mode 100644 index 00000000..c627c249 --- /dev/null +++ b/web/List-Post.xhtml @@ -0,0 +1,16 @@ + + + + + TODO supply a title + + + + +
TODO write content
+ + diff --git a/web/Login.xhtml b/web/Login.xhtml new file mode 100644 index 00000000..c627c249 --- /dev/null +++ b/web/Login.xhtml @@ -0,0 +1,16 @@ + + + + + TODO supply a title + + + + +
TODO write content
+ + diff --git a/web/Publish-Post.xhtml b/web/Publish-Post.xhtml new file mode 100644 index 00000000..c627c249 --- /dev/null +++ b/web/Publish-Post.xhtml @@ -0,0 +1,16 @@ + + + + + TODO supply a title + + + + +
TODO write content
+ + diff --git a/web/View-Post.xhtml b/web/View-Post.xhtml new file mode 100644 index 00000000..c627c249 --- /dev/null +++ b/web/View-Post.xhtml @@ -0,0 +1,16 @@ + + + + + TODO supply a title + + + + +
TODO write content
+ + diff --git a/web/css/blog-old-ie.css b/web/css/blog-old-ie.css new file mode 100644 index 00000000..73ef4587 --- /dev/null +++ b/web/css/blog-old-ie.css @@ -0,0 +1,191 @@ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +a { + text-decoration: none; + color: rgb(61, 146, 201); +} + +a:hover, +a:focus { + text-decoration: underline; +} + +h3 { + font-weight: 100; +} + +/* LAYOUT CSS */ + +.pure-img-responsive { + max-width: 100%; + height: auto; +} + +#layout { + padding: 0; +} + +.header { + text-align: center; + top: auto; + margin: 3em auto; +} + +.sidebar { + background: rgb(61, 79, 93); + color: #fff; +} + +.brand-title, +.brand-tagline { + margin: 0; +} + +.brand-title { + text-transform: uppercase; +} + +.brand-tagline { + font-weight: 300; + color: rgb(176, 202, 219); +} + +.nav-list { + margin: 0; + padding: 0; + list-style: none; +} + +.nav-item { + display: inline-block; + *display: inline; + zoom: 1; +} + +.nav-item a { + background: transparent; + border: 2px solid rgb(176, 202, 219); + color: #fff; + margin-top: 1em; + letter-spacing: 0.05em; + text-transform: uppercase; + font-size: 85%; +} + +.nav-item a:hover, +.nav-item a:focus { + border: 2px solid rgb(61, 146, 201); + text-decoration: none; +} + +.content-subhead { + text-transform: uppercase; + color: #aaa; + border-bottom: 1px solid #eee; + padding: 0.4em 0; + font-size: 80%; + font-weight: 500; + letter-spacing: 0.1em; +} + +.content { + padding: 2em 1em 0; +} + +.post { + padding-bottom: 2em; +} + +.post-title { + font-size: 2em; + color: #222; + margin-bottom: 0.2em; +} + +.post-avatar { + border-radius: 50px; + float: right; + margin-left: 1em; +} + +.post-description { + font-family: Georgia, "Cambria", serif; + color: #444; + line-height: 1.8em; +} + +.post-meta { + color: #999; + font-size: 90%; + margin: 0; +} + +.post-category { + margin: 0 0.1em; + padding: 0.3em 1em; + color: #fff; + background: #999; + font-size: 80%; +} + +.post-category-design { + background: #5aba59; +} + +.post-category-pure { + background: #4d85d1; +} + +.post-category-yui { + background: #8156a7; +} + +.post-category-js { + background: #df2d4f; +} + +.post-images { + margin: 1em 0; +} + +.post-image-meta { + margin-top: -3.5em; + margin-left: 1em; + color: #fff; + text-shadow: 0 1px 1px #333; +} + +.footer { + text-align: center; + padding: 1em 0; +} + +.footer a { + color: #ccc; + font-size: 80%; +} + +.footer .pure-menu a:hover, +.footer .pure-menu a:focus { + background: none; +} + +.content { + padding: 2em 3em 0; + margin-left: 25%; +} + +.header { + margin: 80% 2em 0; + text-align: right; +} + +.sidebar { + position: fixed; + top: 0; + bottom: 0; +} \ No newline at end of file diff --git a/web/css/blog.css b/web/css/blog.css new file mode 100644 index 00000000..297939e7 --- /dev/null +++ b/web/css/blog.css @@ -0,0 +1,175 @@ +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +a { + text-decoration: none; + color: rgb(61, 146, 201); +} +a:hover, +a:focus { + text-decoration: underline; +} + +h3 { + font-weight: 100; +} + +/* LAYOUT CSS */ +.pure-img-responsive { + max-width: 100%; + height: auto; +} + +#layout { + padding: 0; +} + +.header { + text-align: center; + top: auto; + margin: 3em auto; +} + +.sidebar { + background: rgb(61, 79, 93); + color: #fff; +} + +.brand-title, +.brand-tagline { + margin: 0; +} +.brand-title { + text-transform: uppercase; +} +.brand-tagline { + font-weight: 300; + color: rgb(176, 202, 219); +} + +.nav-list { + margin: 0; + padding: 0; + list-style: none; +} +.nav-item { + display: inline-block; + *display: inline; + zoom: 1; +} +.nav-item a { + background: transparent; + border: 2px solid rgb(176, 202, 219); + color: #fff; + margin-top: 1em; + letter-spacing: 0.05em; + text-transform: uppercase; + font-size: 85%; +} +.nav-item a:hover, +.nav-item a:focus { + border: 2px solid rgb(61, 146, 201); + text-decoration: none; +} + +.content-subhead { + text-transform: uppercase; + color: #aaa; + border-bottom: 1px solid #eee; + padding: 0.4em 0; + font-size: 80%; + font-weight: 500; + letter-spacing: 0.1em; +} + +.content { + padding: 2em 1em 0; +} + +.post { + padding-bottom: 2em; +} +.post-title { + font-size: 2em; + color: #222; + margin-bottom: 0.2em; +} +.post-avatar { + border-radius: 50px; + float: right; + margin-left: 1em; +} +.post-description { + font-family: Georgia, "Cambria", serif; + color: #444; + line-height: 1.8em; +} +.post-meta { + color: #999; + font-size: 90%; + margin: 0; +} + +.post-category { + margin: 0 0.1em; + padding: 0.3em 1em; + color: #fff; + background: #999; + font-size: 80%; +} + .post-category-design { + background: #5aba59; + } + .post-category-pure { + background: #4d85d1; + } + .post-category-yui { + background: #8156a7; + } + .post-category-js { + background: #df2d4f; + } + +.post-images { + margin: 1em 0; +} +.post-image-meta { + margin-top: -3.5em; + margin-left: 1em; + color: #fff; + text-shadow: 0 1px 1px #333; +} + +.footer { + text-align: center; + padding: 1em 0; +} +.footer a { + color: #ccc; + font-size: 80%; +} +.footer .pure-menu a:hover, +.footer .pure-menu a:focus { + background: none; +} + +@media (min-width: 48em) { + .content { + padding: 2em 3em 0; + margin-left: 25%; + } + + .header { + margin: 80% 2em 0; + text-align: right; + } + + .sidebar { + position: fixed; + top: 0; + bottom: 0; + } +} diff --git a/web/index.xhtml b/web/index.xhtml index c70ee58c..6ff40e40 100644 --- a/web/index.xhtml +++ b/web/index.xhtml @@ -2,11 +2,165 @@ - - Facelet Title - - - Hello from Facelets - + + + + + + Blog – + + + + + + + + + + + + +
+ + +
+
+ +
+

Pinned Post

+ + +
+
+ Tilo Mitra's avatar + +

Introducing Pure

+ + +
+ +
+

+ Yesterday at CSSConf, we launched Pure – a new CSS library. Phew! Here are the slides from the presentation. Although it looks pretty minimalist, we’ve been working on Pure for several months. After many iterations, we have released Pure as a set of small, responsive, CSS modules that you can use in every web project. +

+
+
+
+ +
+

Recent Posts

+ +
+
+ Eric Ferraiuolo's avatar + +

Everything You Need to Know About Grunt

+ + +
+ +
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +

+
+
+ +
+
+ Reid Burke's avatar + +

Photos from CSSConf and JSConf

+ + +
+ +
+
+
+ + Photo of someone working poolside at a resort + + +
+

CSSConf Photos

+
+
+ +
+ + Photo of the sunset on the beach + + +
+

JSConf Photos

+
+
+
+
+
+ +
+
+ Andrew Wooldridge's avatar + +

YUI 3.10.2 Released

+ + +
+ +
+

+ We are happy to announce the release of YUI 3.10.2! You can find it now on the Yahoo! CDN, download it directly, or pull it in via npm. We’ve also updated the YUI Library website with the latest documentation. +

+
+
+
+ + +
+
+
+ From 6f90a1b6fce7c3e1539ee6c8533538409ef98048 Mon Sep 17 00:00:00 2001 From: afik Date: Fri, 21 Nov 2014 18:36:39 +0700 Subject: [PATCH 07/69] Create README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..4a6c3a36 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +IF3110-02-Simple-Blog-Java +========================== + +Tugas 2 IF3110 Pengembangan Aplikasi Berbasis Web, membuat Blog Sederhana dengan Teknologi Java + +Dibuat oleh : +Calvin Sadewa +Joshua Bezaleel Abednego +Khoirunnisa Afifah From 509dcaa4be416cd541df39e2c803ad4d614d51e2 Mon Sep 17 00:00:00 2001 From: calvinsadewa Date: Sat, 22 Nov 2014 14:48:16 +0700 Subject: [PATCH 08/69] Mencoba mengenali user --- build.xml | 71 +++++++ build/web/WEB-INF/faces-config.xml | 6 +- build/web/WEB-INF/web.xml | 8 + build/web/index.xhtml | 166 ++++++++++++++- nbproject/genfiles.properties | 16 +- nbproject/private/private.properties | 14 +- nbproject/project.properties | 180 ++++++++-------- src/java/filter/AuthenticationFilter.java | 242 ++++++++++++++++++++++ src/java/model/UserBean.java | 75 +++++++ web/Login.xhtml | 37 ++-- web/WEB-INF/faces-config.xml | 6 +- web/WEB-INF/web.xml | 8 + 12 files changed, 700 insertions(+), 129 deletions(-) create mode 100644 build.xml create mode 100644 src/java/filter/AuthenticationFilter.java create mode 100644 src/java/model/UserBean.java diff --git a/build.xml b/build.xml new file mode 100644 index 00000000..222de282 --- /dev/null +++ b/build.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + Builds, tests, and runs the project Simple Blog. + + + diff --git a/build/web/WEB-INF/faces-config.xml b/build/web/WEB-INF/faces-config.xml index 0393e360..05d957da 100644 --- a/build/web/WEB-INF/faces-config.xml +++ b/build/web/WEB-INF/faces-config.xml @@ -3,5 +3,9 @@ xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"> - + + userBean + model.UserBean + session + diff --git a/build/web/WEB-INF/web.xml b/build/web/WEB-INF/web.xml index c5e7c738..2fb929e5 100644 --- a/build/web/WEB-INF/web.xml +++ b/build/web/WEB-INF/web.xml @@ -4,6 +4,14 @@ javax.faces.PROJECT_STAGE Development + + AuthenticationFilter + filter.AuthenticationFilter + + + AuthenticationFilter + /faces/* + Faces Servlet javax.faces.webapp.FacesServlet diff --git a/build/web/index.xhtml b/build/web/index.xhtml index c70ee58c..6ff40e40 100644 --- a/build/web/index.xhtml +++ b/build/web/index.xhtml @@ -2,11 +2,165 @@ - - Facelet Title - - - Hello from Facelets - + + + + + + Blog – + + + + + + + + + + + + +
+ + +
+
+ +
+

Pinned Post

+ + +
+
+ Tilo Mitra's avatar + +

Introducing Pure

+ + +
+ +
+

+ Yesterday at CSSConf, we launched Pure – a new CSS library. Phew! Here are the slides from the presentation. Although it looks pretty minimalist, we’ve been working on Pure for several months. After many iterations, we have released Pure as a set of small, responsive, CSS modules that you can use in every web project. +

+
+
+
+ +
+

Recent Posts

+ +
+
+ Eric Ferraiuolo's avatar + +

Everything You Need to Know About Grunt

+ + +
+ +
+

+ Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +

+
+
+ +
+
+ Reid Burke's avatar + +

Photos from CSSConf and JSConf

+ + +
+ +
+
+
+ + Photo of someone working poolside at a resort + + +
+

CSSConf Photos

+
+
+ +
+ + Photo of the sunset on the beach + + +
+

JSConf Photos

+
+
+
+
+
+ +
+
+ Andrew Wooldridge's avatar + +

YUI 3.10.2 Released

+ + +
+ +
+

+ We are happy to announce the release of YUI 3.10.2! You can find it now on the Yahoo! CDN, download it directly, or pull it in via npm. We’ve also updated the YUI Library website with the latest documentation. +

+
+
+
+ + +
+
+
+ diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties index ee6fbc76..c374d506 100644 --- a/nbproject/genfiles.properties +++ b/nbproject/genfiles.properties @@ -1,8 +1,8 @@ -build.xml.data.CRC32=8950f2de -build.xml.script.CRC32=3bca006e -build.xml.stylesheet.CRC32=651128d4@1.67.1.1 -# 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=8950f2de -nbproject/build-impl.xml.script.CRC32=8df462ce -nbproject/build-impl.xml.stylesheet.CRC32=99ea4b56@1.67.1.1 +build.xml.data.CRC32=8950f2de +build.xml.script.CRC32=3bca006e +build.xml.stylesheet.CRC32=651128d4@1.68.1.1 +# 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=8950f2de +nbproject/build-impl.xml.script.CRC32=8df462ce +nbproject/build-impl.xml.stylesheet.CRC32=99ea4b56@1.67.1.1 diff --git a/nbproject/private/private.properties b/nbproject/private/private.properties index 9921af67..3101ea5f 100644 --- a/nbproject/private/private.properties +++ b/nbproject/private/private.properties @@ -1,7 +1,7 @@ -deploy.ant.properties.file=C:\\Users\\Afik\\AppData\\Roaming\\NetBeans\\8.0\\config\\GlassFishEE6\\Properties\\gfv3-968141306.properties -j2ee.platform.is.jsr109=true -j2ee.server.domain=C:/Users/Afik/AppData/Roaming/NetBeans/8.0/config/GF_4.0/domain1 -j2ee.server.home=C:/Program Files/glassfish-4.0/glassfish -j2ee.server.instance=[C:\\Program Files\\glassfish-4.0\\glassfish;C:\\Program Files\\glassfish-4.0\\glassfish\\domains\\domain1]deployer:gfv3ee6:localhost:4848 -j2ee.server.middleware=C:/Program Files/glassfish-4.0 -user.properties.file=C:\\Users\\Afik\\AppData\\Roaming\\NetBeans\\8.0\\build.properties +deploy.ant.properties.file=C:\\Users\\calvin-pc\\AppData\\Roaming\\NetBeans\\8.0.1\\config\\GlassFishEE6\\Properties\\gfv32109099552.properties +j2ee.platform.is.jsr109=true +j2ee.server.domain=D:/Program Files/glassfish-4.1/glassfish/domains/domain1 +j2ee.server.home=D:/Program Files/glassfish-4.1/glassfish +j2ee.server.instance=[D:\\Program Files\\glassfish-4.1\\glassfish;D:\\Program Files\\glassfish-4.1\\glassfish\\domains\\domain1]deployer:gfv3ee6:localhost:4848 +j2ee.server.middleware=D:/Program Files/glassfish-4.1 +user.properties.file=C:\\Users\\calvin-pc\\AppData\\Roaming\\NetBeans\\8.0.1\\build.properties diff --git a/nbproject/project.properties b/nbproject/project.properties index 57320ba9..5cb5eef4 100644 --- a/nbproject/project.properties +++ b/nbproject/project.properties @@ -1,90 +1,90 @@ -annotation.processing.enabled=true -annotation.processing.enabled.in.editor=true -annotation.processing.processors.list= -annotation.processing.run.all.processors=true -annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output -auxiliary.org-netbeans-modules-projectapi.jsf_2e_language=Facelets -build.classes.dir=${build.web.dir}/WEB-INF/classes -build.classes.excludes=**/*.java,**/*.form -build.dir=build -build.generated.dir=${build.dir}/generated -build.generated.sources.dir=${build.dir}/generated-sources -build.test.classes.dir=${build.dir}/test/classes -build.test.results.dir=${build.dir}/test/results -build.web.dir=${build.dir}/web -build.web.excludes=${build.classes.excludes} -client.urlPart= -compile.jsps=false -conf.dir=${source.root}/conf -debug.classpath=${build.classes.dir}:${javac.classpath} -debug.test.classpath=\ - ${run.test.classpath} -display.browser=true -# Files to be excluded from distribution war -dist.archive.excludes= -dist.dir=dist -dist.ear.war=${dist.dir}/${war.ear.name} -dist.javadoc.dir=${dist.dir}/javadoc -dist.war=${dist.dir}/${war.name} -endorsed.classpath=\ - ${libs.javaee-endorsed-api-6.0.classpath} -excludes= -includes=** -j2ee.compile.on.save=true -j2ee.copy.static.files.on.save=true -j2ee.deploy.on.save=true -j2ee.platform=1.7-web -j2ee.platform.classpath=${j2ee.server.middleware}/mq/lib/jaxm-api.jar:${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar -j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar -j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar -j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api-osgi.jar -j2ee.platform.wsimport.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api-osgi.jar -j2ee.platform.wsit.classpath= -j2ee.server.type=gfv3ee6 -jar.compress=false -javac.classpath= -# Space-separated list of extra javac options -javac.compilerargs= -javac.debug=true -javac.deprecation=false -javac.processorpath=\ - ${javac.classpath} -javac.source=1.7 -javac.target=1.7 -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.preview=true -javadoc.private=false -javadoc.splitindex=true -javadoc.use=true -javadoc.version=false -javadoc.windowtitle= -lib.dir=${web.docbase.dir}/WEB-INF/lib -no.dependencies=false -persistence.xml.dir=${conf.dir} -platform.active=default_platform -resource.dir=setup -run.test.classpath=\ - ${javac.test.classpath}:\ - ${build.test.classes.dir} -# Space-separated list of JVM arguments used when running a class with a main method or a unit test -# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value): -runmain.jvmargs= -source.encoding=UTF-8 -source.root=src -src.dir=${source.root}/java -test.src.dir=test -war.content.additional= -war.ear.name=${war.name} -war.name=Simple_Blog.war -web.docbase.dir=web -webinf.dir=web/WEB-INF +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=true +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +auxiliary.org-netbeans-modules-projectapi.jsf_2e_language=Facelets +build.classes.dir=${build.web.dir}/WEB-INF/classes +build.classes.excludes=**/*.java,**/*.form +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +build.web.dir=${build.dir}/web +build.web.excludes=${build.classes.excludes} +client.urlPart= +compile.jsps=false +conf.dir=${source.root}/conf +debug.classpath=${build.classes.dir}:${javac.classpath} +debug.test.classpath=\ + ${run.test.classpath} +display.browser=true +# Files to be excluded from distribution war +dist.archive.excludes= +dist.dir=dist +dist.ear.war=${dist.dir}/${war.ear.name} +dist.javadoc.dir=${dist.dir}/javadoc +dist.war=${dist.dir}/${war.name} +endorsed.classpath=\ + ${libs.javaee-endorsed-api-6.0.classpath} +excludes= +includes=** +j2ee.compile.on.save=true +j2ee.copy.static.files.on.save=true +j2ee.deploy.on.save=true +j2ee.platform=1.7-web +j2ee.platform.classpath=${j2ee.server.home}/modules/endorsed/javax.annotation-api.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/bean-validator.jar:${j2ee.server.home}/modules/javax.batch-api.jar:${j2ee.server.home}/modules/javax.ejb-api.jar:${j2ee.server.home}/modules/javax.el.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent-api.jar:${j2ee.server.home}/modules/javax.enterprise.concurrent.jar:${j2ee.server.home}/modules/javax.enterprise.deploy-api.jar:${j2ee.server.home}/modules/javax.faces.jar:${j2ee.server.home}/modules/javax.inject.jar:${j2ee.server.home}/modules/javax.interceptor-api.jar:${j2ee.server.home}/modules/javax.jms-api.jar:${j2ee.server.home}/modules/javax.json.jar:${j2ee.server.home}/modules/javax.mail.jar:${j2ee.server.home}/modules/javax.management.j2ee-api.jar:${j2ee.server.home}/modules/javax.persistence.jar:${j2ee.server.home}/modules/javax.resource-api.jar:${j2ee.server.home}/modules/javax.security.auth.message-api.jar:${j2ee.server.home}/modules/javax.security.jacc-api.jar:${j2ee.server.home}/modules/javax.servlet-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl-api.jar:${j2ee.server.home}/modules/javax.servlet.jsp.jstl.jar:${j2ee.server.home}/modules/javax.transaction-api.jar:${j2ee.server.home}/modules/javax.websocket-api.jar:${j2ee.server.home}/modules/javax.ws.rs-api.jar:${j2ee.server.home}/modules/javax.xml.registry-api.jar:${j2ee.server.home}/modules/javax.xml.rpc-api.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/weld-osgi-bundle.jar:${j2ee.server.middleware}/mq/lib/jaxm-api.jar +j2ee.platform.embeddableejb.classpath=${j2ee.server.home}/lib/embedded/glassfish-embedded-static-shell.jar +j2ee.platform.wscompile.classpath=${j2ee.server.home}/modules/webservices-osgi.jar +j2ee.platform.wsgen.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar +j2ee.platform.wsimport.classpath=${j2ee.server.home}/modules/webservices-osgi.jar:${j2ee.server.home}/modules/endorsed/webservices-api-osgi.jar:${j2ee.server.home}/modules/jaxb-osgi.jar:${j2ee.server.home}/modules/endorsed/jaxb-api.jar +j2ee.platform.wsit.classpath= +j2ee.server.type=gfv3ee6 +jar.compress=false +javac.classpath= +# Space-separated list of extra javac options +javac.compilerargs= +javac.debug=true +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.7 +javac.target=1.7 +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.preview=true +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +lib.dir=${web.docbase.dir}/WEB-INF/lib +no.dependencies=false +persistence.xml.dir=${conf.dir} +platform.active=default_platform +resource.dir=setup +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +# Space-separated list of JVM arguments used when running a class with a main method or a unit test +# (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value): +runmain.jvmargs= +source.encoding=UTF-8 +source.root=src +src.dir=${source.root}/java +test.src.dir=test +war.content.additional= +war.ear.name=${war.name} +war.name=Simple_Blog.war +web.docbase.dir=web +webinf.dir=web/WEB-INF diff --git a/src/java/filter/AuthenticationFilter.java b/src/java/filter/AuthenticationFilter.java new file mode 100644 index 00000000..1c14654b --- /dev/null +++ b/src/java/filter/AuthenticationFilter.java @@ -0,0 +1,242 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package filter; + +import java.io.IOException; +import java.io.PrintStream; +import java.io.PrintWriter; +import java.io.StringWriter; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +/** + * + * @author calvin-pc + */ +public class AuthenticationFilter implements Filter { + + private static final boolean debug = true; + + // The filter configuration object we are associated with. If + // this value is null, this filter instance is not currently + // configured. + private FilterConfig filterConfig = null; + + public AuthenticationFilter() { + } + + private void doBeforeProcessing(ServletRequest request, ServletResponse response) + throws IOException, ServletException { + if (debug) { + log("AuthenticationFilter:DoBeforeProcessing"); + } + + // Write code here to process the request and/or response before + // the rest of the filter chain is invoked. + // For example, a logging filter might log items on the request object, + // such as the parameters. + /* + for (Enumeration en = request.getParameterNames(); en.hasMoreElements(); ) { + String name = (String)en.nextElement(); + String values[] = request.getParameterValues(name); + int n = values.length; + StringBuffer buf = new StringBuffer(); + buf.append(name); + buf.append("="); + for(int i=0; i < n; i++) { + buf.append(values[i]); + if (i < n-1) + buf.append(","); + } + log(buf.toString()); + } + */ + } + + private void doAfterProcessing(ServletRequest request, ServletResponse response) + throws IOException, ServletException { + if (debug) { + log("AuthenticationFilter:DoAfterProcessing"); + } + + // Write code here to process the request and/or response after + // the rest of the filter chain is invoked. + // For example, a logging filter might log the attributes on the + // request object after the request has been processed. + /* + for (Enumeration en = request.getAttributeNames(); en.hasMoreElements(); ) { + String name = (String)en.nextElement(); + Object value = request.getAttribute(name); + log("attribute: " + name + "=" + value.toString()); + + } + */ + // For example, a filter might append something to the response. + /* + PrintWriter respOut = new PrintWriter(response.getWriter()); + respOut.println("

This has been appended by an intrusive filter."); + */ + } + + /** + * + * @param request The servlet request we are processing + * @param response The servlet response we are creating + * @param chain The filter chain we are processing + * + * @exception IOException if an input/output error occurs + * @exception ServletException if a servlet error occurs + */ + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) + throws IOException, ServletException { + + if (debug) { + log("AuthenticationFilter:doFilter()"); + } + + doBeforeProcessing(request, response); + + Throwable problem = null; + try { + + // check whether session variable is set + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse res = (HttpServletResponse) response; + HttpSession ses = req.getSession(false); + // allow user to proccede if url is Login.xhtml or List-Post.xhtml or View-Post.xhtml + // TODO ganti ini dengan navigation bean kalau navigation bean sudah selesai + String reqURI = req.getRequestURI(); + if ( reqURI.indexOf("/Login.xhtml") >= 0 + || reqURI.indexOf("/List-Post.xhtml") >= 0 + || reqURI.indexOf("/View-Post.xhtml") >= 0 ) + chain.doFilter(request, response); + else + res.sendRedirect(req.getContextPath() +"/faces" +"/Login.xhtml"); // Anonymous user. Redirect to login page + } + catch(Throwable t) { + System.out.println( t.getMessage()); + } + + doAfterProcessing(request, response); + + // If there was a problem, we want to rethrow it if it is + // a known type, otherwise log it. + if (problem != null) { + if (problem instanceof ServletException) { + throw (ServletException) problem; + } + if (problem instanceof IOException) { + throw (IOException) problem; + } + sendProcessingError(problem, response); + } + } + + /** + * Return the filter configuration object for this filter. + */ + public FilterConfig getFilterConfig() { + return (this.filterConfig); + } + + /** + * Set the filter configuration object for this filter. + * + * @param filterConfig The filter configuration object + */ + public void setFilterConfig(FilterConfig filterConfig) { + this.filterConfig = filterConfig; + } + + /** + * Destroy method for this filter + */ + public void destroy() { + } + + /** + * Init method for this filter + */ + public void init(FilterConfig filterConfig) { + this.filterConfig = filterConfig; + if (filterConfig != null) { + if (debug) { + log("AuthenticationFilter:Initializing filter"); + } + } + } + + /** + * Return a String representation of this object. + */ + @Override + public String toString() { + if (filterConfig == null) { + return ("AuthenticationFilter()"); + } + StringBuffer sb = new StringBuffer("AuthenticationFilter("); + sb.append(filterConfig); + sb.append(")"); + return (sb.toString()); + } + + private void sendProcessingError(Throwable t, ServletResponse response) { + String stackTrace = getStackTrace(t); + + if (stackTrace != null && !stackTrace.equals("")) { + try { + response.setContentType("text/html"); + PrintStream ps = new PrintStream(response.getOutputStream()); + PrintWriter pw = new PrintWriter(ps); + pw.print("\n\nError\n\n\n"); //NOI18N + + // PENDING! Localize this for next official release + pw.print("

The resource did not process correctly

\n
\n");                
+                pw.print(stackTrace);                
+                pw.print("
\n"); //NOI18N + pw.close(); + ps.close(); + response.getOutputStream().close(); + } catch (Exception ex) { + } + } else { + try { + PrintStream ps = new PrintStream(response.getOutputStream()); + t.printStackTrace(ps); + ps.close(); + response.getOutputStream().close(); + } catch (Exception ex) { + } + } + } + + public static String getStackTrace(Throwable t) { + String stackTrace = null; + try { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + t.printStackTrace(pw); + pw.close(); + sw.close(); + stackTrace = sw.getBuffer().toString(); + } catch (Exception ex) { + } + return stackTrace; + } + + public void log(String msg) { + filterConfig.getServletContext().log(msg); + } + +} diff --git a/src/java/model/UserBean.java b/src/java/model/UserBean.java new file mode 100644 index 00000000..175a5879 --- /dev/null +++ b/src/java/model/UserBean.java @@ -0,0 +1,75 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package model; + +/** + * + * @author calvin-pc + */ +public class UserBean { + // TODO Tambah nama user dan email dan kawan - kawan + private static final int owner = 1; + private static final int admin = 2; + private static final int editor = 3; + private static final int guest = 4; + + /** + * @return the owner + */ + public static int getOwner() { + return owner; + } + + /** + * @return the admin + */ + public static int getAdmin() { + return admin; + } + + /** + * @return the editor + */ + public static int getEditor() { + return editor; + } + + /** + * @return the guest + */ + public static int getGuest() { + return guest; + } + + private int role; + /** + * Creates a new instance of UserBean + */ + public UserBean() { + role = guest; + } + + /** + * @return the role + */ + public int getRole() { + return role; + } + + /** + * @param role the role to set + */ + public void setRole(int role) { + this.role = role; + } + + public String getRoleName() { + if (role == owner) return "owner"; + else if (role == admin) return "admin"; + else if (role == editor) return "editor"; + else return "guest"; + } +} diff --git a/web/Login.xhtml b/web/Login.xhtml index c627c249..6a4ef48b 100644 --- a/web/Login.xhtml +++ b/web/Login.xhtml @@ -1,16 +1,21 @@ - - - - - TODO supply a title - - - - -
TODO write content
- - + + + + + + Login Form + + +

Hello, your role is #{userBean.roleName}

+ + + RoleNumber: +
+ +
+
+
+ \ No newline at end of file diff --git a/web/WEB-INF/faces-config.xml b/web/WEB-INF/faces-config.xml index 0393e360..05d957da 100644 --- a/web/WEB-INF/faces-config.xml +++ b/web/WEB-INF/faces-config.xml @@ -3,5 +3,9 @@ xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"> - + + userBean + model.UserBean + session + diff --git a/web/WEB-INF/web.xml b/web/WEB-INF/web.xml index c5e7c738..2fb929e5 100644 --- a/web/WEB-INF/web.xml +++ b/web/WEB-INF/web.xml @@ -4,6 +4,14 @@ javax.faces.PROJECT_STAGE Development + + AuthenticationFilter + filter.AuthenticationFilter + + + AuthenticationFilter + /faces/* + Faces Servlet javax.faces.webapp.FacesServlet From 179532c5a6eb206f66d3631ed8f6b037567ca015 Mon Sep 17 00:00:00 2001 From: calvinsadewa Date: Sat, 22 Nov 2014 14:58:41 +0700 Subject: [PATCH 09/69] Coba Login.xhtml --- src/java/filter/AuthenticationFilter.java | 19 ++++++++++++++----- web/Login.xhtml | 5 ++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/java/filter/AuthenticationFilter.java b/src/java/filter/AuthenticationFilter.java index 1c14654b..e64f2e34 100644 --- a/src/java/filter/AuthenticationFilter.java +++ b/src/java/filter/AuthenticationFilter.java @@ -18,6 +18,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; +import model.UserBean; /** * @@ -109,18 +110,26 @@ public void doFilter(ServletRequest request, ServletResponse response, Throwable problem = null; try { - + // check whether session variable is set HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; - HttpSession ses = req.getSession(false); + HttpSession ses = req.getSession(); + UserBean user; + user = (UserBean)ses.getAttribute("userBean"); // allow user to proccede if url is Login.xhtml or List-Post.xhtml or View-Post.xhtml // TODO ganti ini dengan navigation bean kalau navigation bean sudah selesai String reqURI = req.getRequestURI(); - if ( reqURI.indexOf("/Login.xhtml") >= 0 - || reqURI.indexOf("/List-Post.xhtml") >= 0 - || reqURI.indexOf("/View-Post.xhtml") >= 0 ) + + String login = "/Login.xhtml"; + String listPost = "/List-Post.xhtml"; + String viewPost = "/View-Post.xhtml"; + if ( reqURI.indexOf(login) >= 0 + || reqURI.indexOf(listPost) >= 0 + || reqURI.indexOf(viewPost) >= 0 ) chain.doFilter(request, response); + else if (user.getRole() == UserBean.getAdmin()) + chain.doFilter(request, response); else res.sendRedirect(req.getContextPath() +"/faces" +"/Login.xhtml"); // Anonymous user. Redirect to login page } diff --git a/web/Login.xhtml b/web/Login.xhtml index 6a4ef48b..9540784f 100644 --- a/web/Login.xhtml +++ b/web/Login.xhtml @@ -14,8 +14,11 @@ RoleNumber:
- + + +

Untuk sementara hanya admin yang bisa akses semua page, + role number admin = 2

\ No newline at end of file From 559aa5c34f947d8186539cc97a6602300227dbc4 Mon Sep 17 00:00:00 2001 From: afik Date: Mon, 24 Nov 2014 16:05:53 +0700 Subject: [PATCH 10/69] coba navigation --- build/web/WEB-INF/faces-config.xml | 10 + build/web/index.xhtml | 36 +- nbproject/private/private.properties | 14 +- nbproject/project.properties | 180 +-- src/java/model/NavigationController.java | 37 + src/java/model/Post.java | 71 + web/WEB-INF/faces-config.xml | 10 + web/css/blog.css | 140 +- web/css/pure.css | 1664 ++++++++++++++++++++++ web/index.xhtml | 36 +- 10 files changed, 2064 insertions(+), 134 deletions(-) create mode 100644 src/java/model/NavigationController.java create mode 100644 src/java/model/Post.java create mode 100644 web/css/pure.css diff --git a/build/web/WEB-INF/faces-config.xml b/build/web/WEB-INF/faces-config.xml index 05d957da..c3a51fea 100644 --- a/build/web/WEB-INF/faces-config.xml +++ b/build/web/WEB-INF/faces-config.xml @@ -8,4 +8,14 @@ model.UserBean session + + post + model.Post + request + + + NavigationController + model.NavigationController + request + diff --git a/build/web/index.xhtml b/build/web/index.xhtml index 6ff40e40..7640301e 100644 --- a/build/web/index.xhtml +++ b/build/web/index.xhtml @@ -9,34 +9,34 @@ Blog – - - - + + + - - + + - + +