diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..5ff6309b7199129c1afe4f4ec1906e640bec48c6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..13566b81b018ad684f3a35fee301741b2734c8f4 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000000000000000000000000000000000000..aa00ffab7828f4818589659c804ec2cfd99baed3 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Encoding"> + <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" /> + <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000000000000000000000000000000000..e9fd53dd0897b1489e5bbd6579a3c54482e15c4d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ExternalStorageConfigurationManager" enabled="true" /> + <component name="MavenProjectsManager"> + <option name="originalFiles"> + <list> + <option value="$PROJECT_DIR$/pom.xml" /> + </list> + </option> + <option name="workspaceImportForciblyTurnedOn" value="true" /> + </component> + <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17 (2)" project-jdk-type="JavaSDK"> + <output url="file://$PROJECT_DIR$/out" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b63946d5b31084bbb7dda418ceb3d75eb686373 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Palette2"> + <group name="Swing"> + <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> + </item> + <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> + </item> + <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> + </item> + <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true"> + <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> + </item> + <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> + <initial-values> + <property name="text" value="Button" /> + </initial-values> + </item> + <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> + <initial-values> + <property name="text" value="RadioButton" /> + </initial-values> + </item> + <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> + <initial-values> + <property name="text" value="CheckBox" /> + </initial-values> + </item> + <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> + <initial-values> + <property name="text" value="Label" /> + </initial-values> + </item> + <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> + <preferred-size width="150" height="-1" /> + </default-constraints> + </item> + <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> + <preferred-size width="150" height="-1" /> + </default-constraints> + </item> + <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> + <preferred-size width="150" height="-1" /> + </default-constraints> + </item> + <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> + </item> + <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> + <preferred-size width="150" height="50" /> + </default-constraints> + </item> + <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> + <preferred-size width="200" height="200" /> + </default-constraints> + </item> + <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> + <preferred-size width="200" height="200" /> + </default-constraints> + </item> + <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> + </item> + <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> + </item> + <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> + </item> + <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> + </item> + <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> + <preferred-size width="-1" height="20" /> + </default-constraints> + </item> + <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false"> + <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> + </item> + <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false"> + <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> + </item> + </group> + </component> +</project> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..94a25f7f4cb416c083d265558da75d457237d671 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..f23e2a1ae05fe7163b220146d0e83118e55a1649 --- /dev/null +++ b/pom.xml @@ -0,0 +1,51 @@ +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <groupId>nl.utwente.di</groupId> + <artifactId>bookQuote</artifactId> + <version>0.0.1-SNAPSHOT</version> + <packaging>war</packaging> + <properties> + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + </properties> + + <build> + <finalName>${project.artifactId}</finalName> + <plugins> + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <version>3.10.1</version> + <configuration> + <source>17</source> + <target>17</target> + </configuration> + </plugin> + <plugin> + <artifactId>maven-war-plugin</artifactId> + <version>3.3.2</version> + <configuration> + <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors> + </configuration> + </plugin> + </plugins> + </build> + <dependencies> + + <!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api --> + <dependency> + <groupId>jakarta.servlet</groupId> + <artifactId>jakarta.servlet-api</artifactId> + <version>6.0.0</version> + <scope>provided</scope> + </dependency> + + <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter-api</artifactId> + <version>5.11.0-M1</version> + <scope>test</scope> + </dependency> + + </dependencies> +</project> diff --git a/src/main/java/nl/utwente/di/TemperatureTranslation/TemperatureTranslation.java b/src/main/java/nl/utwente/di/TemperatureTranslation/TemperatureTranslation.java new file mode 100644 index 0000000000000000000000000000000000000000..05f8f68c7a2956bcdc72baf92d7ae59be9663768 --- /dev/null +++ b/src/main/java/nl/utwente/di/TemperatureTranslation/TemperatureTranslation.java @@ -0,0 +1,49 @@ +package nl.utwente.di.TemperatureTranslation; + +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + +import java.io.IOException; +import java.io.PrintWriter; + +/** Example of a Servlet that gets a temperature value in Celsius + * and returns the translated temperature value in Fahrenheit. + */ + +public class TemperatureTranslation extends HttpServlet { + /** + * + */ + private static final long serialVersionUID = 1L; + private Translator translator; + + public void init() throws ServletException { + translator = new Translator(); + } + + public void doGet(HttpServletRequest request, + HttpServletResponse response) + throws ServletException, IOException { + + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + String title = "Temperature"; + + // Done with string concatenation only for the demo + // Not expected to be done like this in the project + out.println("<!DOCTYPE HTML>\n" + + "<HTML>\n" + + "<HEAD><TITLE>" + title + "</TITLE>" + + "<LINK REL=STYLESHEET HREF=\"styles.css\">" + + "</HEAD>\n" + + "<BODY BGCOLOR=\"#FDF5E6\">\n" + + "<H1>" + title + "</H1>\n" + + " <P>Temperature (in Celsius): " + + request.getParameter("temp") + "\n" + + " <P>Temperature (in Fahrenheit): " + + translator.calculateTemperature(Integer.parseInt(request.getParameter("temp"))) + + "</BODY></HTML>"); + } +} diff --git a/src/main/java/nl/utwente/di/TemperatureTranslation/Translator.java b/src/main/java/nl/utwente/di/TemperatureTranslation/Translator.java new file mode 100644 index 0000000000000000000000000000000000000000..7122a67f217cacf790184234084878546526670b --- /dev/null +++ b/src/main/java/nl/utwente/di/TemperatureTranslation/Translator.java @@ -0,0 +1,7 @@ +package nl.utwente.di.TemperatureTranslation; + +public class Translator { + public int calculateTemperature(int tempInCelsius) { + return (tempInCelsius * 9/5) + 32; + } +} diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000000000000000000000000000000000..1fe87ba36a6a45667b213ff6839ac1c093aa7a38 --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee + https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd" + version="6.0"> + + <display-name>di.TemperatureTranslation</display-name> + + <welcome-file-list> + <welcome-file>index.html</welcome-file> + <welcome-file>index.htm</welcome-file> + <welcome-file>index.jsp</welcome-file> + <welcome-file>default.html</welcome-file> + <welcome-file>default.htm</welcome-file> + <welcome-file>default.jsp</welcome-file> + </welcome-file-list> + <servlet> + <description>TemperatureTranslation Servlet</description> + <display-name>TemperatureTranslation</display-name> + <servlet-name>TemperatureTranslation</servlet-name> + <servlet-class>nl.utwente.di.TemperatureTranslation.TemperatureTranslation</servlet-class> + </servlet> + <servlet-mapping> + <servlet-name>TemperatureTranslation</servlet-name> + <url-pattern>/TemperatureTranslation</url-pattern> + </servlet-mapping> +</web-app> \ No newline at end of file diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html new file mode 100644 index 0000000000000000000000000000000000000000..ab992b637357dde3efdde365a036c7944d6bedf0 --- /dev/null +++ b/src/main/webapp/index.html @@ -0,0 +1,20 @@ +<!DOCTYPE HTML> +<!-- Front end for the TemperatureTranslation Servlet. --> + +<html lang="en"> +<head> +<title>Temperature Calculator Application</title> +<link rel="stylesheet" href="styles.css"> +<meta charset="UTF-8"> +</head> + +<body> +<h1>Temperature Calculator Application</h1> + +<form ACTION="./TemperatureTranslation"> + <p>Enter temperature value (in Celsius): <input TYPE="TEXT" NAME="temp"></p> + <input TYPE="SUBMIT"> +</form> + +</body> +</html> diff --git a/src/main/webapp/styles.css b/src/main/webapp/styles.css new file mode 100644 index 0000000000000000000000000000000000000000..e3911593be8c37faac51502a8d09f71ee477ee70 --- /dev/null +++ b/src/main/webapp/styles.css @@ -0,0 +1,52 @@ +BODY { background-color: WHITE } + +H1 { color: PURPLE; + text-align: left; + font-size: 28px; + font-family: Arial, Helvetica, sans-serif; + font-weight: normal +} +.LARGER { font-size: 120% } +.TINY { font-size: 50% } +H2 { color: #440000; + text-align: left; + font-family: Arial, Helvetica, sans-serif +} +H3 { color: #440000; + text-align: left; + font-family: Arial, Helvetica, sans-serif +} +UL { margin-top: 0; + border-top-width: 0; + padding-top: 0 +} + +P { color: BLACK; + text-align: left; + font-size: 20px; + font-family: Arial, Helvetica, sans-serif +} + +FORM { color: BLACK; + text-align: left; + font-size: 20px; + font-family: Arial, Helvetica, sans-serif +} + +PRE { font-size: 105%; +} +CODE { font-size: 105%; +} +.TOC { font-size: 90%; + font-weight: bold; + font-family: Arial, Helvetica, sans-serif +} +TH.COLORED { background-color: #FFAD00 +} +TR.COLORED { background-color: #FFAD00 +} +TH.TITLE { background-color: #EF8429; + font-size: 40px; + font-family: Arial, Helvetica, sans-serif; +} +A:hover { color: red } diff --git a/src/test/java/nl/utwente/di/TemperatureTranslation/TestTranslator.java b/src/test/java/nl/utwente/di/TemperatureTranslation/TestTranslator.java new file mode 100644 index 0000000000000000000000000000000000000000..97f25fdca45db344fb93ff15ce84c4f01dad3ef7 --- /dev/null +++ b/src/test/java/nl/utwente/di/TemperatureTranslation/TestTranslator.java @@ -0,0 +1,12 @@ +package nl.utwente.di.TemperatureTranslation; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +/*** Tests the Temperature Translator */ +public class TestTranslator { + @Test + public void testTranslation() throws Exception { + Translator translator = new Translator(); + int temp = translator.calculateTemperature(30); + Assertions.assertEquals(86, temp, 0.0, "30 Celsius in Fahrenheit"); + } +}