diff --git a/.gitignore b/.gitignore index 21782104a6b70584acfe9c8abc092a1446f6c074..2c0bec3c9dca32efe6064b2203aeefe09c340116 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,5 @@ **/.classpath /.idea/vcs.xml /.idea/workspace.xml + +**/.idea \ No newline at end of file diff --git a/.gitignore.orig b/.gitignore.orig new file mode 100644 index 0000000000000000000000000000000000000000..6edc488f16834fb336f66f6e7d6739d059a799fa --- /dev/null +++ b/.gitignore.orig @@ -0,0 +1,26 @@ +/.idea/.name +/.idea/compiler.xml +/.idea/copyright/profiles_settings.xml +/.idea/dataSources.ids +/.idea/dataSources.local.xml +/.idea/dataSources.xml +/.idea/deployment.xml +/.idea/encodings.xml +/.idea/misc.xml +/.idea/modules.xml +/.idea/sqldialects.xml +**/*.iml +**/workspace.xml +/gemeinsamforschen/**/.idea/* +/gemeinsamforschen/**/out +/gemeinsamforschen/**/target +/gemeinsamforschen/**/.settings +**/.project +**/.classpath +/.idea/vcs.xml +/.idea/workspace.xml +<<<<<<< HEAD +**/.idea +======= +/.idea/workspace.xml +>>>>>>> PeerAssessmentAxel diff --git a/.idea/workspace.xml b/.idea/workspace.xml deleted file mode 100644 index 03d62d167dc479a2cbe39237d40f9d6e78e67321..0000000000000000000000000000000000000000 --- a/.idea/workspace.xml +++ /dev/null @@ -1,729 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project version="4"> - <component name="ChangeListManager"> - <list default="true" id="b207c042-3fc9-4102-bf50-ee6c9b45c20d" name="Default" comment=""> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" /> - <change type="MODIFICATION" beforePath="$PROJECT_DIR$/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java" afterPath="$PROJECT_DIR$/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java" /> - </list> - <ignored path="fltrail.iws" /> - <ignored path=".idea/workspace.xml" /> - <ignored path="$PROJECT_DIR$/out/" /> - <ignored path=".idea/dataSources.local.xml" /> - <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> - <option name="TRACKING_ENABLED" value="true" /> - <option name="SHOW_DIALOG" value="false" /> - <option name="HIGHLIGHT_CONFLICTS" value="true" /> - <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> - <option name="LAST_RESOLUTION" value="IGNORE" /> - </component> - <component name="CreatePatchCommitExecutor"> - <option name="PATCH_PATH" value="" /> - </component> - <component name="DatabaseView"> - <option name="SHOW_INTERMEDIATE" value="true" /> - <option name="GROUP_SCHEMA" value="true" /> - <option name="GROUP_CONTENTS" value="false" /> - <option name="SORT_POSITIONED" value="false" /> - <option name="SHOW_TABLE_DETAILS" value="true" /> - <option name="SHOW_EMPTY_GROUPS" value="false" /> - <option name="AUTO_SCROLL_FROM_SOURCE" value="false" /> - </component> - <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" /> - <component name="FavoritesManager"> - <favorites_list name="fltrail" /> - </component> - <component name="FileEditorManager"> - <leaf SIDE_TABS_SIZE_LIMIT_KEY="300"> - <file leaf-file-name="ResearchReport.java" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ResearchReport.java"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="693"> - <caret line="33" column="39" lean-forward="false" selection-start-line="33" selection-start-column="39" selection-end-line="33" selection-end-column="39" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="projects.php" pinned="false" current-in-tab="true"> - <entry file="file://$PROJECT_DIR$/studentview/pages/projects.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="21"> - <caret line="125" column="34" lean-forward="false" selection-start-line="125" selection-start-column="34" selection-end-line="125" selection-end-column="34" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="showProjects.js" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/showProjects.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="651"> - <caret line="31" column="38" lean-forward="false" selection-start-line="31" selection-start-column="38" selection-end-line="31" selection-end-column="38" /> - <folding /> - </state> - </provider> - </entry> - </file> - <file leaf-file-name="overview.js" pinned="false" current-in-tab="false"> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/overview.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="1806"> - <caret line="86" column="0" lean-forward="false" selection-start-line="86" selection-start-column="0" selection-end-line="86" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - </file> - </leaf> - </component> - <component name="FileTemplateManagerImpl"> - <option name="RECENT_TEMPLATES"> - <list> - <option value="CSS File" /> - <option value="JavaScript File" /> - </list> - </option> - </component> - <component name="Git.Settings"> - <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> - <option name="RECENT_BRANCH_BY_REPOSITORY"> - <map> - <entry key="$PROJECT_DIR$" value="master" /> - </map> - </option> - </component> - <component name="GradleLocalSettings"> - <option name="externalProjectsViewState"> - <projects_view /> - </option> - </component> - <component name="IdeDocumentHistory"> - <option name="CHANGED_PATHS"> - <list> - <option value="$USER_HOME$/php/php.ini" /> - <option value="$PROJECT_DIR$/studentview/database/getProjects.php" /> - <option value="$PROJECT_DIR$/studentview/database/getProjectsOfAuthor.php" /> - <option value="$PROJECT_DIR$/studentview/assets/css/projects.css" /> - <option value="$APPLICATION_CONFIG_DIR$/consoles/db/14340c2c-ac4b-492f-ac4f-18c0853598a8/console_1.sql" /> - <option value="$PROJECT_DIR$/studentview/database/deleteProject.php" /> - <option value="$PROJECT_DIR$/studentview/assets/js/getProjects.js" /> - <option value="$PROJECT_DIR$/studentview/database/createUser.php" /> - <option value="$PROJECT_DIR$/studentview/assets/css/Sidebar-Menu1.css" /> - <option value="$PROJECT_DIR$/studentview/database/tokenSetter.php" /> - <option value="$PROJECT_DIR$/studentview/pages/menu.php" /> - <option value="dbtable:/fc3764cf/14340c2c-ac4b-492f-ac4f-18c0853598a8/fltrail.projects" /> - <option value="$PROJECT_DIR$/studentview/assets/css/styles.css" /> - <option value="$PROJECT_DIR$/dbschema/fltrail.sql" /> - <option value="$PROJECT_DIR$/dbschema/createDummyUser.sql" /> - <option value="$PROJECT_DIR$/studentview/database/getAdresses.php" /> - <option value="$PROJECT_DIR$/studentview/pages/mygroups.php" /> - <option value="$PROJECT_DIR$/studentview/assets/js/myGroupsInit.js" /> - <option value="$PROJECT_DIR$/studentview/assets/js/createPreferences.js" /> - <option value="$PROJECT_DIR$/studentview/assets/js/deleteProject.js" /> - <option value="$PROJECT_DIR$/studentview/assets/js/newProject.js" /> - <option value="$PROJECT_DIR$/studentview/pages/deleteProject.php" /> - <option value="$PROJECT_DIR$/studentview/pages/enrollment.php" /> - <option value="$PROJECT_DIR$/studentview/pages/newproject.php" /> - <option value="$PROJECT_DIR$/studentview/pages/projects.php" /> - <option value="$PROJECT_DIR$/studentview/register.php" /> - <option value="$PROJECT_DIR$/studentview/pages/preferences.php" /> - <option value="$PROJECT_DIR$/studentview/assets/js/config.js" /> - <option value="$PROJECT_DIR$/studentview/database/config.php" /> - <option value="$PROJECT_DIR$/studentview/assets/js/overview.js" /> - <option value="$PROJECT_DIR$/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ResearchReport.java" /> - </list> - </option> - </component> - <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" /> - <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" /> - <component name="JsGulpfileManager"> - <detection-done>true</detection-done> - <sorting>DEFINITION_ORDER</sorting> - </component> - <component name="PhpDebugGeneral" notify_if_session_was_finished_without_being_paused="false" /> - <component name="PhpServers"> - <servers> - <server host="localhost/fltrail/studentview" id="0689838e-2d6d-4149-9413-e6535e936a72" name="Localhost"> - <path_mappings> - <mapping local-root="$PROJECT_DIR$" remote-root="/fltrail/studentview" /> - </path_mappings> - </server> - <server host="localhost" id="75f2248a-2fea-4485-9fd7-0dc130516437" name="localhost" /> - <server host="141.89.159.250" id="a7129b24-16e0-4988-abb2-c07e26d5f743" name="141.89.159.250" port="443" use_path_mappings="true"> - <path_mappings> - <mapping local-root="$PROJECT_DIR$/studentview" remote-root="C:/dev/amp/htdocs" /> - </path_mappings> - </server> - </servers> - </component> - <component name="PhpWebServerValidation" path_to_validation_script="C:\dev\amp\htdocs\" selected_validation_type="LOCAL" web_path_to_validation_script="http://127.0.0.1/" /> - <component name="PhpWorkspaceProjectConfiguration" backward_compatibility_performed="true" interpreter_name="PHP" /> - <component name="ProjectFrameBounds"> - <option name="x" value="-9" /> - <option name="y" value="-9" /> - <option name="width" value="1938" /> - <option name="height" value="1050" /> - </component> - <component name="ProjectLevelVcsManager" settingsEditedManually="true" /> - <component name="ProjectView"> - <navigator currentView="ProjectPane" proportions="" version="1"> - <flattenPackages /> - <showMembers /> - <showModules /> - <showLibraryContents /> - <hideEmptyPackages ProjectPane="true" /> - <abbreviatePackageNames /> - <autoscrollToSource /> - <autoscrollFromSource /> - <sortByType /> - <manualOrder /> - <foldersAlwaysOnTop value="true" /> - </navigator> - <panes> - <pane id="ProjectPane"> - <subPane> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="fltrail" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="fltrail" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="fltrail" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="fltrail" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="studentview" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="fltrail" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="fltrail" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="studentview" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="pages" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="fltrail" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="fltrail" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="studentview" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="assets" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="js" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - </PATH> - <PATH> - <PATH_ELEMENT> - <option name="myItemId" value="fltrail" /> - <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="fltrail" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="studentview" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - <PATH_ELEMENT> - <option name="myItemId" value="assets" /> - <option name="myItemType" value="com.jetbrains.php.projectView.PhpTreeStructureProvider$1" /> - </PATH_ELEMENT> - </PATH> - </subPane> - </pane> - <pane id="Scratches" /> - <pane id="Scope" /> - <pane id="PackagesPane" /> - <pane id="AndroidView" /> - </panes> - </component> - <component name="PropertiesComponent"> - <property name="aspect.path.notification.shown" value="true" /> - <property name="WebServerToolWindowFactoryState" value="true" /> - <property name="js-jscs-nodeInterpreter" value="C:\Program Files\nodejs\node.exe" /> - <property name="settings.editor.selected.configurable" value="database.main" /> - <property name="settings.editor.splitter.proportion" value="0.2" /> - <property name="last_opened_file_path" value="$PROJECT_DIR$/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces" /> - <property name="list.type.of.created.stylesheet" value="CSS" /> - <property name="SearchEverywhereHistoryKey" value="	FILE	dbDummy://dbtable:/fc3764cf/14340c2c-ac4b-492f-ac4f-18c0853598a8/fltrail.users" /> - </component> - <component name="RecentsManager"> - <key name="CopyFile.RECENT_KEYS"> - <recent name="C:\Users\quark\IdeaProjects\fltrail\gemeinsamforschen\src\main\java\unipotsdam\gf\interfaces" /> - <recent name="C:\dev\amp\htdocs\fltrail\studentview\pages" /> - </key> - </component> - <component name="RunDashboard"> - <option name="ruleStates"> - <list> - <RuleState> - <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> - </RuleState> - <RuleState> - <option name="name" value="StatusDashboardGroupingRule" /> - </RuleState> - </list> - </option> - </component> - <component name="RunManager"> - <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug"> - <method /> - </configuration> - <configuration default="true" type="PHPUnitRunConfigurationType" factoryName="PHPUnit"> - <TestRunner /> - <method /> - </configuration> - <configuration default="true" type="PhpLocalRunConfigurationType" factoryName="PHP Console"> - <method /> - </configuration> - <configuration default="true" type="PhpWebAppRunConfigurationType" factoryName="PHP Web Application" server_name="Localhost"> - <method /> - </configuration> - <configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js"> - <node-interpreter>project</node-interpreter> - <node-options /> - <gulpfile /> - <tasks /> - <arguments /> - <envs /> - <method /> - </configuration> - <configuration default="true" type="js.build_tools.npm" factoryName="npm"> - <command value="run" /> - <scripts /> - <node-interpreter value="project" /> - <envs /> - <method /> - </configuration> - <configuration default="false" name="phpserver" type="PhpWebAppRunConfigurationType" factoryName="PHP Web Application" server_name="Localhost" start_url="/index.php"> - <method /> - </configuration> - <configuration default="false" name="test" type="PhpWebAppRunConfigurationType" factoryName="PHP Web Application" server_name="Localhost" start_url="/test.php"> - <method /> - </configuration> - <list size="2"> - <item index="0" class="java.lang.String" itemvalue="PHP Web Application.phpserver" /> - <item index="1" class="java.lang.String" itemvalue="PHP Web Application.test" /> - </list> - </component> - <component name="SbtLocalSettings"> - <option name="externalProjectsViewState"> - <projects_view /> - </option> - </component> - <component name="ShelveChangesManager" show_recycled="false"> - <option name="remove_strategy" value="false" /> - </component> - <component name="SvnConfiguration"> - <configuration /> - </component> - <component name="TaskManager"> - <task active="true" id="Default" summary="Default task"> - <changelist id="b207c042-3fc9-4102-bf50-ee6c9b45c20d" name="Default" comment="" /> - <created>1522142632208</created> - <option name="number" value="Default" /> - <option name="presentableId" value="Default" /> - <updated>1522142632208</updated> - <workItem from="1522142635858" duration="32910000" /> - <workItem from="1522918322507" duration="37691000" /> - <workItem from="1524484938943" duration="3356000" /> - <workItem from="1524585513713" duration="57000" /> - <workItem from="1528200793936" duration="888000" /> - <workItem from="1528354427057" duration="403000" /> - </task> - <servers /> - </component> - <component name="TimeTrackingManager"> - <option name="totallyTimeSpent" value="75305000" /> - </component> - <component name="ToolWindowManager"> - <frame x="-9" y="-9" width="1938" height="1050" extended-state="6" /> - <layout> - <window_info id="Remote Host" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" /> - <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2125" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" x="9" y="79" width="408" height="943" /> - <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> - <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.23455825" sideWeight="0.47734374" order="8" side_tool="true" content_ui="tabs" /> - <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.15729167" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" /> - <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.35496482" sideWeight="0.71510416" order="2" side_tool="false" content_ui="tabs" /> - <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> - <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" /> - <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="5" side_tool="true" content_ui="tabs" /> - <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.331509" sideWeight="0.52265626" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> - <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> - <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> - <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Application Servers" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.3297062" sideWeight="0.5" order="11" side_tool="false" content_ui="tabs" /> - <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" /> - <window_info id="Capture Tool" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" /> - <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="5" side_tool="false" content_ui="combo" /> - <window_info id="Designer" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" /> - <window_info id="JSF" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="9" side_tool="false" content_ui="tabs" /> - <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" /> - <window_info id="UI Designer" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.36247173" sideWeight="0.57851565" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Palette	" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" /> - <window_info id="Image Layers" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" /> - <window_info id="Java Enterprise" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="12" side_tool="false" content_ui="tabs" /> - <window_info id="Capture Analysis" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" /> - <window_info id="Sequence" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.45516202" sideWeight="0.5" order="13" side_tool="false" content_ui="tabs" /> - <window_info id="Database Console" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32994527" sideWeight="0.4984375" order="14" side_tool="false" content_ui="tabs" /> - <window_info id="Bean Validation" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="10" side_tool="false" content_ui="tabs" /> - <window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="true" content_ui="tabs" /> - <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.2736513" sideWeight="0.6203125" order="1" side_tool="false" content_ui="tabs" /> - <window_info id="Theme Preview" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" /> - </layout> - </component> - <component name="TypeScriptGeneratedFilesManager"> - <option name="processedProjectFiles" value="true" /> - </component> - <component name="Vcs.Log.UiProperties"> - <option name="RECENTLY_FILTERED_USER_GROUPS"> - <collection /> - </option> - <option name="RECENTLY_FILTERED_BRANCH_GROUPS"> - <collection /> - </option> - </component> - <component name="VcsContentAnnotationSettings"> - <option name="myLimit" value="2678400000" /> - </component> - <component name="XDebuggerManager"> - <breakpoint-manager> - <option name="time" value="47" /> - </breakpoint-manager> - <watches-manager /> - </component> - <component name="antWorkspaceConfiguration"> - <option name="IS_AUTOSCROLL_TO_SOURCE" value="false" /> - <option name="FILTER_TARGETS" value="false" /> - </component> - <component name="editorHistoryManager"> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/jquery.min.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/database/getProjectsOfAuthor.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="16" column="29" lean-forward="false" selection-start-line="15" selection-start-column="0" selection-end-line="16" selection-end-column="29" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/database/putTagsAndPW.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/database/getTags.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="25" column="5" lean-forward="false" selection-start-line="25" selection-start-column="5" selection-end-line="25" selection-end-column="5" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/assets/css/projects.css"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="25" column="0" lean-forward="false" selection-start-line="25" selection-start-column="0" selection-end-line="25" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$APPLICATION_CONFIG_DIR$/consoles/db/14340c2c-ac4b-492f-ac4f-18c0853598a8/console_1.sql" /> - <entry file="dbDummy://dbtable:/fc3764cf/14340c2c-ac4b-492f-ac4f-18c0853598a8/fltrail.tags" /> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/register.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/getProjects.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="4" column="9" lean-forward="false" selection-start-line="4" selection-start-column="9" selection-end-line="4" selection-end-column="9" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/assets/css/Sidebar-Menu1.css"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="49" column="13" lean-forward="false" selection-start-line="49" selection-start-column="13" selection-end-line="49" selection-end-column="13" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/Sidebar-Menu.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/database/tokenSetter.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="17" column="2" lean-forward="false" selection-start-line="17" selection-start-column="2" selection-end-line="17" selection-end-column="2" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/database/deleteProject.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="35" column="42" lean-forward="false" selection-start-line="35" selection-start-column="42" selection-end-line="35" selection-end-column="42" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/database/putProject.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="21" column="44" lean-forward="false" selection-start-line="21" selection-start-column="44" selection-end-line="21" selection-end-column="44" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/database/getProjects.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="21" column="4" lean-forward="false" selection-start-line="21" selection-start-column="4" selection-end-line="21" selection-end-column="60" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/assets/css/styles.css"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="349" column="57" lean-forward="false" selection-start-line="349" selection-start-column="57" selection-end-line="349" selection-end-column="57" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/database/userExists.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="24" column="44" lean-forward="false" selection-start-line="24" selection-start-column="44" selection-end-line="24" selection-end-column="44" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/database/createUser.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="12" column="0" lean-forward="false" selection-start-line="33" selection-start-column="16" selection-end-line="34" selection-end-column="34" /> - </state> - </provider> - </entry> - <entry file="file://$USER_HOME$/phpMyAdmin/index.php" /> - <entry file="file://$USER_HOME$/phpMyAdmin/js/get_scripts.js.php" /> - <entry file="file://$PROJECT_DIR$/dbschema/fltrail.sql" /> - <entry file="file://$PROJECT_DIR$/dbschema/createDummyUser.sql" /> - <entry file="file://$PROJECT_DIR$/studentview/database/getAdresses.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="60" column="20" lean-forward="false" selection-start-line="60" selection-start-column="20" selection-end-line="60" selection-end-column="20" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/myGroupsInit.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="31" column="13" lean-forward="false" selection-start-line="31" selection-start-column="12" selection-end-line="31" selection-end-column="13" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/utility.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="9" lean-forward="false" selection-start-line="0" selection-start-column="9" selection-end-line="0" selection-end-column="9" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/deleteProject.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="29" column="45" lean-forward="false" selection-start-line="29" selection-start-column="45" selection-end-line="29" selection-end-column="45" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/newProject.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="92" column="40" lean-forward="false" selection-start-line="92" selection-start-column="40" selection-end-line="92" selection-end-column="40" /> - </state> - </provider> - </entry> - <entry file="dbDummy://dbtable:/fc3764cf/14340c2c-ac4b-492f-ac4f-18c0853598a8/fltrail.projects" /> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/createPreferences.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="124" column="28" lean-forward="false" selection-start-line="124" selection-start-column="28" selection-end-line="124" selection-end-column="28" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/pages/deleteProject.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="19" column="50" lean-forward="false" selection-start-line="19" selection-start-column="50" selection-end-line="19" selection-end-column="50" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/pages/enrollment.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="19" column="50" lean-forward="false" selection-start-line="19" selection-start-column="50" selection-end-line="19" selection-end-column="50" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/pages/menu.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="20" column="6" lean-forward="false" selection-start-line="20" selection-start-column="6" selection-end-line="20" selection-end-column="6" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/pages/mygroups.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="19" column="4" lean-forward="false" selection-start-line="19" selection-start-column="4" selection-end-line="19" selection-end-column="50" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/pages/newproject.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="21" column="50" lean-forward="false" selection-start-line="21" selection-start-column="50" selection-end-line="21" selection-end-column="50" /> - </state> - </provider> - </entry> - <entry file="dbDummy://dbtable:/fc3764cf/14340c2c-ac4b-492f-ac4f-18c0853598a8/fltrail.users" /> - <entry file="file://$APPLICATION_CONFIG_DIR$/consoles/db/85944065-0254-4a61-b256-d3493cdb0a4f/console.sql" /> - <entry file="file://$PROJECT_DIR$/studentview/pages/preferences.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="725"> - <caret line="112" column="0" lean-forward="false" selection-start-line="112" selection-start-column="0" selection-end-line="112" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/database/config.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="160"> - <caret line="8" column="0" lean-forward="false" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/config.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="40"> - <caret line="2" column="71" lean-forward="false" selection-start-line="2" selection-start-column="71" selection-end-line="2" selection-end-column="71" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/index.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="520"> - <caret line="26" column="45" lean-forward="false" selection-start-line="26" selection-start-column="45" selection-end-line="26" selection-end-column="45" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/register.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="425"> - <caret line="24" column="98" lean-forward="false" selection-start-line="24" selection-start-column="98" selection-end-line="24" selection-end-column="98" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/.gitignore"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/gemeinsamforschen/out/artifacts/gemeinsamforschen_war_exploded/META-INF/MANIFEST.MF" /> - <entry file="file://$PROJECT_DIR$/gemeinsamforschen/src/scripts/munschkins.sql"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="0"> - <caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/gemeinsamforschen/src/main/java/unipotsdam/gf/munchkin/IMunschkin.java" /> - <entry file="file://$PROJECT_DIR$/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ResearchReport" /> - <entry file="file://$PROJECT_DIR$/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IMunschkin.java"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="240"> - <caret line="12" column="0" lean-forward="true" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ResearchReport.java"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="693"> - <caret line="33" column="39" lean-forward="false" selection-start-line="33" selection-start-column="39" selection-end-line="33" selection-end-column="39" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/showProjects.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="651"> - <caret line="31" column="38" lean-forward="false" selection-start-line="31" selection-start-column="38" selection-end-line="31" selection-end-column="38" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/assets/js/overview.js"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="1806"> - <caret line="86" column="0" lean-forward="false" selection-start-line="86" selection-start-column="0" selection-end-line="86" selection-end-column="0" /> - <folding /> - </state> - </provider> - </entry> - <entry file="file://$PROJECT_DIR$/studentview/pages/projects.php"> - <provider selected="true" editor-type-id="text-editor"> - <state relative-caret-position="21"> - <caret line="125" column="34" lean-forward="false" selection-start-line="125" selection-start-column="34" selection-end-line="125" selection-end-column="34" /> - <folding /> - </state> - </provider> - </entry> - </component> -</project> \ No newline at end of file diff --git a/gemeinsamforschen/pom.xml b/gemeinsamforschen/pom.xml index 81951f476e7c6886f61276836521106f18b32204..e23a29992f526e80c3722a35ceb67be4d603cc01 100644 --- a/gemeinsamforschen/pom.xml +++ b/gemeinsamforschen/pom.xml @@ -146,6 +146,24 @@ <version>3.0.1</version> <scope>provided</scope> </dependency> + <dependency> + <groupId>org.glassfish.jersey.test-framework.providers</groupId> + <artifactId>jersey-test-framework-provider-inmemory</artifactId> + <version>${jersey.version}</version> + </dependency> + <dependency> + <groupId>org.glassfish.jersey.test-framework</groupId> + <artifactId>jersey-test-framework-util</artifactId> + <version>2.27</version> + <scope>test</scope> + </dependency> + + <!-- dropwizard - Need this for '@PATCH' annotation --> + <dependency> + <groupId>io.dropwizard</groupId> + <artifactId>dropwizard-core</artifactId> + <version>1.3.4</version> + </dependency> <dependency> <groupId>com.atlassian.commonmark</groupId> diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/Constants.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/Constants.java new file mode 100644 index 0000000000000000000000000000000000000000..125862780cbc50f02a1a8978b49f87eaacdeef3c --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/Constants.java @@ -0,0 +1,6 @@ +package unipotsdam.gf.config; + +public interface Constants { + + String ROCKET_CHAT_URL = "http://rocketchat.westeurope.cloudapp.azure.com"; +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java new file mode 100644 index 0000000000000000000000000000000000000000..554cf0504b8783acc9589f00deaa64eb8356a581 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java @@ -0,0 +1,15 @@ +package unipotsdam.gf.config; + +import org.glassfish.hk2.utilities.binding.AbstractBinder; +import unipotsdam.gf.core.management.Management; +import unipotsdam.gf.core.management.ManagementImpl; +import unipotsdam.gf.interfaces.ICommunication; +import unipotsdam.gf.modules.communication.service.CommunicationDummyService; + +public class GFApplicationBinder extends AbstractBinder { + @Override + protected void configure() { + bind(CommunicationDummyService.class).to(ICommunication.class); + bind(ManagementImpl.class).to(Management.class); + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/GFDatabaseConfig.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFDatabaseConfig.java similarity index 92% rename from gemeinsamforschen/src/main/java/unipotsdam/gf/GFDatabaseConfig.java rename to gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFDatabaseConfig.java index 60776e4510da20091cb98c522dcc2661dcd115e0..252905102d2472eaa125f06499bbdfe1663ea254 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/GFDatabaseConfig.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFDatabaseConfig.java @@ -1,4 +1,4 @@ -package unipotsdam.gf; +package unipotsdam.gf.config; /** * Created by dehne on 31.05.2018. diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFResourceConfig.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFResourceConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..4cef8bbc5dce4f8fdb74373b18d949ea7d093ba1 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFResourceConfig.java @@ -0,0 +1,11 @@ +package unipotsdam.gf.config; + +import org.glassfish.jersey.server.ResourceConfig; + +public class GFResourceConfig extends ResourceConfig { + + public GFResourceConfig() { + register(new GFApplicationBinder()); + packages("unipotsdam.gf"); + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/MysqlConnect.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/MysqlConnect.java index 002c4bbd3b1eaf5fed52afd74769d11ee74b6746..80ed128cf20fc34528390e98806b166a9495fde7 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/MysqlConnect.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/MysqlConnect.java @@ -1,6 +1,6 @@ package unipotsdam.gf.core.database.mysql; -import unipotsdam.gf.GFDatabaseConfig; +import unipotsdam.gf.config.GFDatabaseConfig; import java.sql.*; import java.util.Date; diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/VereinfachtesResultSet.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/VereinfachtesResultSet.java index e997c2bd1e1eb277171c7257530476f943817818..ff270f7b46d23457b3742b15596a296d9a99179e 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/VereinfachtesResultSet.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/database/mysql/VereinfachtesResultSet.java @@ -1,6 +1,10 @@ package unipotsdam.gf.core.database.mysql; -import java.sql.*; +import java.sql.Date; +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import java.sql.Timestamp; public class VereinfachtesResultSet { @@ -71,6 +75,15 @@ public class VereinfachtesResultSet { throw new Error("error in VereinfachtesResultSet"); } + public Timestamp getTimestamp(String columnLabel) { + try { + return resultSet.getTimestamp(columnLabel); + } catch (SQLException ex) { + System.err.println(ex.getMessage()); + } + throw new Error("error in VereinfachtesResultSet"); + } + public String getString(String columnLabel) { try { diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java index dd4ebf438976d96cfe61b1bf4402569834e57ae7..73c0b1e608c2ea6dc3821ad703904162908d9577 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/Management.java @@ -1,10 +1,13 @@ package unipotsdam.gf.core.management; +import unipotsdam.gf.core.management.group.Group; import unipotsdam.gf.core.management.project.Project; import unipotsdam.gf.core.management.user.User; import unipotsdam.gf.core.management.user.UserInterests; import unipotsdam.gf.core.management.user.UserProfile; -import unipotsdam.gf.modules.assessment.controller.StudentIdentifier; +import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; + +import java.util.List; /** * Created by dehne on 31.05.2018. @@ -13,12 +16,14 @@ import unipotsdam.gf.modules.assessment.controller.StudentIdentifier; public interface Management { /** * delete a User in the database + * * @param identifier */ void delete(StudentIdentifier identifier); /** * create a User in the database + * * @param user * @param profile */ @@ -26,18 +31,28 @@ public interface Management { /** * create a Project in the database + * * @param project */ void create(Project project); /** * Delete a Project in the database + * * @param project */ void delete(Project project); + /** + * Update a User in the database + * + * @param user + */ + void update(User user); + /** * Add an entry in the M:N table linking users and projects + * * @param user * @param project * @param interests @@ -46,20 +61,29 @@ public interface Management { /** * Check if a user exists in the DB + * * @param user * @return */ Boolean exists(User user); + /** + * Check if a project exists in the DB + */ + + Boolean exists(Project project); + /** * Get all the users linked to a project + * * @param project * @return */ - java.util.List<User> getUsers(Project project); + List<User> getUsers(Project project); /** * get the token for the user + * * @param user * @return */ @@ -67,9 +91,34 @@ public interface Management { /** * get the user given his http token + * * @param token * @return */ - User getUser(String token); + User getUserByToken(String token); + + /** + * get user by its email address + * + * @param email + * @return + */ + User getUserByEmail(String email); + + /** + * get project by its id + * + * @param id + * @return + */ + Project getProjectById(String id); + + void createGroup(Group group, String projectId); + + void addGroupMember(User groupMember, int groupId); + + void deleteGroupMember(User groupMember, int groupId); + + List<Group> getGroupsByProjectId(String projectId); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java index dfffd4df1fdf0dee228ae9e1d499876342e4219c..1cecac2de82d93e049cbc159843b7f91334fb6ec 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/ManagementImpl.java @@ -2,12 +2,17 @@ package unipotsdam.gf.core.management; import unipotsdam.gf.core.database.mysql.MysqlConnect; import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet; +import unipotsdam.gf.core.management.group.Group; import unipotsdam.gf.core.management.project.Project; import unipotsdam.gf.core.management.user.User; import unipotsdam.gf.core.management.user.UserInterests; import unipotsdam.gf.core.management.user.UserProfile; -import unipotsdam.gf.modules.assessment.controller.StudentIdentifier; +import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; +import javax.annotation.ManagedBean; +import javax.annotation.Resource; +import javax.inject.Singleton; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -15,6 +20,9 @@ import java.util.UUID; /** * Created by dehne on 31.05.2018. */ +@ManagedBean +@Resource +@Singleton public class ManagementImpl implements Management { @Override public void delete(StudentIdentifier identifier) { @@ -32,14 +40,16 @@ public class ManagementImpl implements Management { MysqlConnect connect = new MysqlConnect(); connect.connect(); - String mysqlRequest = "INSERT INTO users (`name`, `password`, `email`, `token`,`isStudent`) values (?,?,?,?,?)"; + String mysqlRequest = "INSERT INTO users (`name`, `password`, `email`, `token`,`isStudent`," + + "`rocketChatId`,`rocketChatAuthToken`) values (?,?,?,?,?,?,?)"; connect.issueInsertOrDeleteStatement(mysqlRequest, user.getName(), user.getPassword(), user.getEmail(), - token, user.getStudent()); + token, user.getStudent(), user.getRocketChatId(), user.getRocketChatAuthToken()); connect.close(); // TODO implmement UserProfile @Mar } + // TODO: naming convention discussion? all is named create, but group is named createGroup @Override public void create(Project project) { UUID uuid = UUID.randomUUID(); @@ -48,9 +58,10 @@ public class ManagementImpl implements Management { MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = - "INSERT INTO projects (`id`, `password`, `activ`, `timecreated`, `author`, " + "`adminpassword`, `token`) values (?,?,?,?,?,?,?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), project.getPassword(), project.getActiv(), - project.getTimecreated(), project.getAuthor(), project.getAdminpassword(), token); + "INSERT INTO projects (`id`, `password`, `active`, `timecreated`, `author`, " + + "`adminPassword`, `token`) values (?,?,?,?,?,?,?)"; + connect.issueInsertOrDeleteStatement(mysqlRequest, project.getId(), project.getPassword(), project.isActive(), + project.getTimecreated(), project.getAuthor(), project.getAdminPassword(), token); connect.close(); } @@ -72,9 +83,20 @@ public class ManagementImpl implements Management { connect.close(); } + @Override + public void update(User user) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "UPDATE `users` SET `name`=?,`password`=?,`email`=?,`token`=?,`isStudent`=?, `rocketChatId`=?,`rocketChatAuthToken`=? WHERE email=? LIMIT 1"; + //TODO: maybe add handling if a line is actually updated + connect.issueUpdateStatement(mysqlRequest, user.getName(), user.getPassword(), user.getEmail(), + user.getToken(), user.getStudent(), user.getRocketChatId(), user.getRocketChatAuthToken(), user.getEmail()); + connect.close(); + } + @Override public Boolean exists(User user) { - Boolean result = false; + Boolean result; MysqlConnect connect = new MysqlConnect(); connect.connect(); String mysqlRequest = "SELECT * FROM users where email = ? and password = ?"; @@ -82,18 +104,31 @@ public class ManagementImpl implements Management { connect.issueSelectStatement(mysqlRequest, user.getEmail(), user.getPassword()); result = vereinfachtesResultSet.next(); connect.close(); - if (result == null) { - return false; - } + return result; + } + + @Override + public Boolean exists(Project project) { + Boolean result; + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "SELECT * FROM projects where id = ? and adminPassword = ?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, project.getId(), project.getAdminPassword()); + result = vereinfachtesResultSet.next(); + connect.close(); return result; } @Override public List<User> getUsers(Project project) { String query = - "SELECT * FROM users u " + " JOIN projectuser pu ON u.email=pu.userId" + " JOIN projects p ON pu.projectId = p.id" + " WHERE pu.projectId = ?"; + "SELECT * FROM users u " + + " JOIN projectuser pu ON u.email=pu.userId" + + " JOIN projects p ON pu.projectId = p.id" + + " WHERE pu.projectId = ?"; - ArrayList<User> result = new ArrayList<User>(); + ArrayList<User> result = new ArrayList<>(); MysqlConnect connect = new MysqlConnect(); connect.connect(); VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(query, project.getId()); @@ -112,12 +147,31 @@ public class ManagementImpl implements Management { String name = vereinfachtesResultSet.getString("name"); String password = vereinfachtesResultSet.getString("password"); String email = vereinfachtesResultSet.getString("email"); - String rocketChatId = vereinfachtesResultSet.getString("rocketchatid"); + String rocketChatId = vereinfachtesResultSet.getString("rocketChatId"); + String rocketChatAuthToken = vereinfachtesResultSet.getString("rocketChatAuthToken"); Boolean isStudent = vereinfachtesResultSet.getBoolean("isStudent"); + return new User(name, password, email, rocketChatId, rocketChatAuthToken, isStudent); + } - return new User(name, password, email, rocketChatId, isStudent); + private Project getProjectFromResultSet(VereinfachtesResultSet vereinfachtesResultSet) { + String id = vereinfachtesResultSet.getString("id"); + String password = vereinfachtesResultSet.getString("password"); + boolean active = vereinfachtesResultSet.getBoolean("active"); + Timestamp timestamp = vereinfachtesResultSet.getTimestamp("timecreated"); + String author = vereinfachtesResultSet.getString("author"); + String adminPassword = vereinfachtesResultSet.getString("adminpassword"); + String token = vereinfachtesResultSet.getString("token"); + + return new Project(id, password, active, timestamp, author, adminPassword, token); } + private Group getGroupFromResultSet(VereinfachtesResultSet vereinfachtesResultSet) { + int id = vereinfachtesResultSet.getInt("id"); + String projectId = vereinfachtesResultSet.getString("projectId"); + String chatRoomId = vereinfachtesResultSet.getString("chatRoomId"); + // TODO: determine how to get all User + return new Group(id, new ArrayList<>(), projectId, chatRoomId); + } @Override public String getUserToken(User user) { MysqlConnect connect = new MysqlConnect(); @@ -136,12 +190,21 @@ public class ManagementImpl implements Management { } @Override - public User getUser(String token) { + public User getUserByToken(String token) { + return getUserByField("token", token); + } + + @Override + public User getUserByEmail(String email) { + return getUserByField("email", email); + } + + private User getUserByField(String field, String value) { MysqlConnect connect = new MysqlConnect(); connect.connect(); - String mysqlRequest = "SELECT * FROM users where token = ?"; + String mysqlRequest = "SELECT * FROM users where " + field + " = ?"; VereinfachtesResultSet vereinfachtesResultSet = - connect.issueSelectStatement(mysqlRequest, token); + connect.issueSelectStatement(mysqlRequest, value); boolean next = vereinfachtesResultSet.next(); if (next) { User user = getUserFromResultSet(vereinfachtesResultSet); @@ -152,4 +215,68 @@ public class ManagementImpl implements Management { return null; } } + + @Override + public Project getProjectById(String id) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + String mysqlRequest = "SELECT * FROM projects where id = ?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, id); + boolean next = vereinfachtesResultSet.next(); + if (next) { + Project project = getProjectFromResultSet(vereinfachtesResultSet); + connect.close(); + return project; + } else { + connect.close(); + return null; + } + } + + + @Override + public void createGroup(Group group, String projectId) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + + Project project = getProjectById(projectId); + + for (User groupMember : group.getMembers()) { + String mysqlRequest2 = "INSERT INTO groupuser (`userEmail`, `groupId`) values (?,?)"; + connect.issueInsertOrDeleteStatement(mysqlRequest2, groupMember.getEmail(), project.getId()); + } + connect.close(); + } + + @Override + public void addGroupMember(User groupMember, int groupId) { + + } + + @Override + public void deleteGroupMember(User groupMember, int groupId) { + + } + + @Override + public List<Group> getGroupsByProjectId(String projectId) { + MysqlConnect connect = new MysqlConnect(); + connect.connect(); + // TODO: implement correct join and finish implementation + String mysqlRequest = "SELECT * FROM groups g " + + "JOIN groupuser gu u ON g.id=gu.groupId " + "JOIN users u ON gu.userEmail=u.email" + + "where g.projectId = ?"; + VereinfachtesResultSet vereinfachtesResultSet = + connect.issueSelectStatement(mysqlRequest, projectId); + ArrayList<Group> groups = new ArrayList<>(); + while (vereinfachtesResultSet.next()) { + //groups.add() + } + if (groups.isEmpty()) { + return null; + } else { + return groups; + } + } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/Group.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/Group.java new file mode 100644 index 0000000000000000000000000000000000000000..ea56b43196cd93b3c87518dfa55ab58e2840c8b9 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/group/Group.java @@ -0,0 +1,67 @@ +package unipotsdam.gf.core.management.group; + +import unipotsdam.gf.core.management.user.User; + +import java.util.List; + +public class Group { + + private int id; // do not set yourself, autoincrement + private List<User> members; + private String projectId; + private String chatRoomId; + + public Group() { + } + + public Group(List<User> members, String projectId) { + this.members = members; + this.projectId = projectId; + this.chatRoomId = ""; + } + + public Group(List<User> members, String projectId, String chatRoomId) { + this.members = members; + this.projectId = projectId; + this.chatRoomId = chatRoomId; + } + + public Group(int id, List<User> members, String projectId, String chatRoomId) { + this.id = id; + this.members = members; + this.projectId = projectId; + this.chatRoomId = chatRoomId; + } + + public List<User> getMembers() { + return members; + } + + public void setMembers(List<User> members) { + this.members = members; + } + + public String getChatRoomId() { + return chatRoomId; + } + + public void setChatRoomId(String chatRoomId) { + this.chatRoomId = chatRoomId; + } + + public void addMember(User user) { + members.add(user); + } + + public String getProjectId() { + return projectId; + } + + public void setProjectId(String projectId) { + this.projectId = projectId; + } + + public int getId() { + return id; + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java index de780722652eb40ea1f6f6e2f1518fa0e752bcb3..682b5c40b13472a4bc3369eb7970ddb9bce428fd 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/project/Project.java @@ -1,7 +1,5 @@ package unipotsdam.gf.core.management.project; -import org.glassfish.grizzly.http.util.TimeStamp; - import java.sql.Timestamp; import java.time.LocalDateTime; import java.time.ZoneId; @@ -13,25 +11,45 @@ public class Project { private String id; private String password; - private String activ; + private Boolean active; private Timestamp timecreated; private String author; - private String adminpassword; + private String adminPassword; private String token; public Project() { } - public Project( - String id, String password, String activ, String author, String adminpassword) { + public Project(String id, String password, Boolean active, String author, String adminPassword) { + this.id = id; + this.password = password; + this.active = active; + this.author = author; + this.adminPassword = adminPassword; + + this.timecreated = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("UTC"))); + } + + public Project(String id, String password, Boolean active, String author, String adminPassword, String token) { this.id = id; this.password = password; - this.activ = activ; + this.active = active; this.author = author; - this.adminpassword = adminpassword; + this.adminPassword = adminPassword; + this.token = token; + + this.timecreated = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("UTC"))); + } - Timestamp ts = Timestamp.valueOf(LocalDateTime.now(ZoneId.of("UTC"))); - this.timecreated = ts; + public Project(String id, String password, Boolean active, Timestamp timecreated, String author, + String adminPassword, String token) { + this.id = id; + this.password = password; + this.active = active; + this.timecreated = timecreated; + this.author = author; + this.adminPassword = adminPassword; + this.token = token; } public String getId() { @@ -50,12 +68,12 @@ public class Project { this.password = password; } - public String getActiv() { - return activ; + public Boolean isActive() { + return active; } - public void setActiv(String activ) { - this.activ = activ; + public void setActive(Boolean active) { + this.active = active; } public String getAuthor() { @@ -66,12 +84,12 @@ public class Project { this.author = author; } - public String getAdminpassword() { - return adminpassword; + public String getAdminPassword() { + return adminPassword; } - public void setAdminpassword(String adminpassword) { - this.adminpassword = adminpassword; + public void setAdminPassword(String adminPassword) { + this.adminPassword = adminPassword; } public String getToken() { diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/HiddenUserTag.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/HiddenUserTag.java index 57b6326cc78caca6e9673a9dab8ce31f0118113e..3b3800696c9a44662e03285220d62fe5e8a6822f 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/HiddenUserTag.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/HiddenUserTag.java @@ -1,24 +1,24 @@ package unipotsdam.gf.core.management.user; import unipotsdam.gf.core.management.ManagementImpl; -import unipotsdam.gf.core.management.user.User; import javax.servlet.http.HttpServletRequest; -import javax.servlet.jsp.tagext.*; -import javax.servlet.jsp.*; -import java.io.*; +import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.PageContext; +import javax.servlet.jsp.tagext.SimpleTagSupport; +import java.io.IOException; /** * implemented while porting the login page. It might be useful to have a hidden user field on the page in order to * manipulate the user data with jquery */ public class HiddenUserTag extends SimpleTagSupport { - public void doTag() throws JspException, IOException { + public void doTag() throws IOException { PageContext pageContext = (PageContext) getJspContext(); HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); String token = request.getParameter("token"); ManagementImpl management = new ManagementImpl(); - User user = management.getUser(token); + User user = management.getUserByToken(token); JspWriter out = getJspContext().getOut(); out.println("<p id=\"user\" hidden>"+user.getName()+"</p>"); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/Menu.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/Menu.java new file mode 100644 index 0000000000000000000000000000000000000000..0687412932fabd0f86be3d43a448500616ab62a8 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/Menu.java @@ -0,0 +1,49 @@ +package unipotsdam.gf.core.management.user; + +import unipotsdam.gf.core.management.Management; +import unipotsdam.gf.core.management.ManagementImpl; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.jsp.JspException; +import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.PageContext; +import javax.servlet.jsp.tagext.SimpleTagSupport; +import java.io.IOException; + +public class Menu extends SimpleTagSupport { + public void doTag() throws JspException, IOException { + Management management = new ManagementImpl(); + PageContext pageContext = (PageContext) getJspContext(); + HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); + String token = request.getParameter("token"); + User user = management.getUserByToken(token); + JspWriter out = getJspContext().getOut(); + Boolean isStudent = user.getStudent(); + if (isStudent){ + out.println("<div id=\"sidebar-wrapper\">\n" + + " <ul class=\"sidebar-nav\">\n" + + " <li class=\"sidebar-brand\"><a href=\"overview-student.html\">overview</a></li>\n" + + " <li><a href=\"takeQuiz.jsp\">Quizfrage</a></li>\n" + + " <li><a href=\"#\">ePortfolio</a></li>\n" + + " <li><a href=\"#\">Beitrag</a></li>\n" + + " <li><a href=\"finalAssessments.jsp\">Bewertung</a></li>\n" + + " <li><a href=\"../index.jsp\">Logout</a></li>\n" + + " </ul>\n" + + " </div>"); + } else { + out.println("<div id=\"sidebar-wrapper\">\n" + + " <ul class=\"sidebar-nav\">\n" + + " <li class=\"sidebar-brand\"><a href=\"overview-docent.html\">overview</a></li>\n" + + " <li><a href=\"createQuiz.jsp\">Quizfrage</a></li>\n" + + " <li><a href=\"#\">ePortfolio</a></li>\n" + + " <li><a href=\"#\">Beitrag</a></li>\n" + + " <li><a href=\"#\">Gruppen erstellen</a></li>\n" + + " <li><a href=\"#\">Projektphase ändern</a></li>\n" + + " <li><a href=\"finalAssessments.jsp\">Bewertung</a></li>\n" + + " <li><a href=\"../index.jsp\">Logout</a></li>\n" + + " </ul>\n" + + " </div>"); + } + + } +}; \ No newline at end of file diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/SessionValidator.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/SessionValidator.java index 8fd6c0f6d2ae28b8f457ad12922d3698990ece10..3a3a695d7e870ddca681c05918a9a5c4acafddfd 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/SessionValidator.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/SessionValidator.java @@ -4,7 +4,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import unipotsdam.gf.core.management.ManagementImpl; -import javax.servlet.*; +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.HttpServletResponse; import java.io.IOException; @@ -14,18 +19,18 @@ import java.io.IOException; */ public class SessionValidator implements Filter { - Logger log = LoggerFactory.getLogger(SessionValidator.class); + private final static Logger log = LoggerFactory.getLogger(SessionValidator.class); private void redirectToLogin(ServletRequest request, ServletResponse response) { log.debug("redirecting user to login because token does not exist"); String loginJSP = "../../index.jsp"; ((HttpServletResponse) response).setHeader("Location", loginJSP); - ((HttpServletResponse) response).setContentType("text/html"); + response.setContentType("text/html"); ((HttpServletResponse) response).setStatus(HttpServletResponse.SC_FOUND); // SC_FOUND = 302 } @Override - public void init(FilterConfig filterConfig) throws ServletException { + public void init(FilterConfig filterConfig) { } @@ -37,7 +42,7 @@ public class SessionValidator implements Filter { redirectToLogin(request, response); } ManagementImpl management = new ManagementImpl(); - User user = management.getUser(token); + User user = management.getUserByToken(token); if (user == null) { redirectToLogin(request, response); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/User.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/User.java index 22f6157174ee5a3d8dbbb81e44e5fb1e8adaf068..ef9531d231c70944f627ee6afbaeb26ee1eb5ac5 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/User.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/User.java @@ -1,14 +1,13 @@ package unipotsdam.gf.core.management.user; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + /** * Created by dehne on 31.05.2018. */ +@JsonIgnoreProperties(ignoreUnknown = true) public class User { - // the email is the id! - public String getId() { - return this.email; - } private String name; private String password; private String email; @@ -25,16 +24,24 @@ public class User { this.password = password; this.email = email; this.isStudent = isStudent; + this.rocketChatAuthToken = ""; + this.rocketChatId = ""; } - public User(String name, String password, String email, String rocketChatId, Boolean isStudent) { + public User(String name, String password, String email, String rocketChatId, String rocketChatAuthToken, Boolean isStudent) { this.name = name; this.password = password; this.email = email; this.rocketChatId = rocketChatId; + this.rocketChatAuthToken = rocketChatAuthToken; this.isStudent = isStudent; } + // the email is the id! + public String getId() { + return this.email; + } + public String getName() { return name; } @@ -68,7 +75,6 @@ public class User { } - public Boolean getStudent() { return isStudent; } @@ -92,4 +98,17 @@ public class User { public void setRocketChatAuthToken(String rocketChatAuthToken) { this.rocketChatAuthToken = rocketChatAuthToken; } + + @Override + public String toString() { + return "User{" + + "name='" + name + '\'' + + ", password='" + password + '\'' + + ", email='" + email + '\'' + + ", token='" + token + '\'' + + ", rocketChatAuthToken='" + rocketChatAuthToken + '\'' + + ", rocketChatId='" + rocketChatId + '\'' + + ", isStudent=" + isStudent + + '}'; + } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java index 124a207aa523d5f6dedb5602e6acea7bee8b3e12..dd60731bfec82b9d1f9ce9138890407b116d5db4 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java @@ -4,6 +4,8 @@ import unipotsdam.gf.core.management.ManagementImpl; import unipotsdam.gf.interfaces.ICommunication; import unipotsdam.gf.modules.communication.service.CommunicationDummyService; +import javax.annotation.ManagedBean; +import javax.inject.Inject; import javax.ws.rs.FormParam; import javax.ws.rs.POST; import javax.ws.rs.Path; @@ -14,8 +16,12 @@ import java.net.URI; import java.net.URISyntaxException; @Path("/user") +@ManagedBean public class UserService { + @Inject + private ICommunication communicationService; + /** * creates a user with given credentials * @@ -36,13 +42,8 @@ public class UserService { ManagementImpl management = new ManagementImpl(); User user = new User(name, password, email, isStudent == null); - ICommunication iCommunication = new CommunicationDummyService(); - boolean chatUserCreated = iCommunication.registerUser(user); - if (chatUserCreated) { - return login(true, user); - } else { - return registrationError(); - } + return login(true, user); + } /** @@ -87,21 +88,35 @@ public class UserService { ManagementImpl management = new ManagementImpl(); if (management.exists(user)) { if (!createUser) { + user = fillUserFields(user); return redirectToProjectPage(user, management); } String existsUrl = "../register.jsp?userExists=true"; return forwardToLocation(existsUrl); } else { if (createUser) { + boolean isRegisteredAndLoggedIn = communicationService.registerAndLoginUser(user); + if (!isRegisteredAndLoggedIn) { + return registrationError(); + } management.create(user, null); + user = fillUserFields(user); + return redirectToProjectPage(user, management); } else { String existsUrl = "../index.jsp?userExists=false"; return forwardToLocation(existsUrl); } - return redirectToProjectPage(user, management); + } } + private User fillUserFields(User user) { + ManagementImpl m = new ManagementImpl(); + String token = m.getUserToken(user); + user = m.getUserByToken(token); + return user; + } + private Response registrationError() throws URISyntaxException { String existsUrl = "../register.jsp?registrationError=true"; return forwardToLocation(existsUrl); diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java.orig b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java.orig new file mode 100644 index 0000000000000000000000000000000000000000..73d84e8fa40445fffec6c0a31a5523f9fb5e318f --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/user/UserService.java.orig @@ -0,0 +1,163 @@ +package unipotsdam.gf.core.management.user; + +import unipotsdam.gf.core.management.ManagementImpl; +import unipotsdam.gf.interfaces.ICommunication; +import unipotsdam.gf.modules.communication.service.CommunicationDummyService; + +import javax.annotation.ManagedBean; +import javax.inject.Inject; +import javax.ws.rs.FormParam; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.net.URI; +import java.net.URISyntaxException; + +@Path("/user") +@ManagedBean +public class UserService { + + @Inject + private ICommunication communicationService; + + /** + * creates a user with given credentials + * + * @param name + * @param password + * @param email + * @param isStudent + * @return + * @throws URISyntaxException + */ + // This method is called if HTML is request + @POST + @Produces(MediaType.TEXT_HTML) + @Path("/create") + public Response createUser(@FormParam("name") String name, @FormParam("password") String password, + @FormParam("email") String email, @FormParam("isStudent") String isStudent) + throws URISyntaxException { + + ManagementImpl management = new ManagementImpl(); + User user = new User(name, password, email, isStudent == null); + return login(true, user); + + } + + /** + * checks if a user exists in order to log him in + * + * @param name + * @param password + * @param email + * @return + * @throws URISyntaxException + */ + // This method is called if HTML is request + @POST + @Produces(MediaType.TEXT_HTML) + @Path("/exists") + public Response existsUser(@FormParam("name") String name, @FormParam("password") String password, + @FormParam("email") String email) + throws URISyntaxException { + + ManagementImpl management = new ManagementImpl(); + User user = new User(name, password, email, null); + ICommunication iCommunication = new CommunicationDummyService(); + boolean isLoggedIn = iCommunication.loginUser(user); + if (isLoggedIn) { + return login(false, user); + } else { + return loginError(); + } + + + } + + /** + * if create User is true, the user is created and logged in if he does not exist + * + * @param createUser + * @param user + * @return + * @throws URISyntaxException + */ + protected Response login(boolean createUser, User user) throws URISyntaxException { + ManagementImpl management = new ManagementImpl(); + if (management.exists(user)) { + if (!createUser) { +<<<<<<< HEAD + ManagementImpl m = new ManagementImpl(); + String token = m.getUserToken(user); + user = m.getUser(token); +======= + boolean successfulLogin = communicationService.loginUser(user); + management.update(user); + if (!successfulLogin) { + return loginError(); + } +>>>>>>> 9bbae0ff75b2597ab35479a24d47c12e7a4cc0fd + return redirectToProjectPage(user, management); + } + String existsUrl = "../register.jsp?userExists=true"; + return forwardToLocation(existsUrl); + } else { + if (createUser) { + boolean isRegisteredAndLoggedIn = communicationService.registerAndLoginUser(user); + if (!isRegisteredAndLoggedIn) { + return registrationError(); + } + management.create(user, null); + } else { + String existsUrl = "../index.jsp?userExists=false"; + return forwardToLocation(existsUrl); + } + ManagementImpl m = new ManagementImpl(); + String token = m.getUserToken(user); + user = m.getUser(token); //todo: write query to get user isStudent + return redirectToProjectPage(user, management); + } + } + + private Response registrationError() throws URISyntaxException { + String existsUrl = "../register.jsp?registrationError=true"; + return forwardToLocation(existsUrl); + } + + private Response loginError() throws URISyntaxException { + String existsUrl = "../index.jsp?loginError=true"; + return forwardToLocation(existsUrl); + } + + /** + * helper function for redirecting to the right project page + * + * @param user + * @param management + * @return + * @throws URISyntaxException + */ + private Response redirectToProjectPage(User user, ManagementImpl management) throws URISyntaxException { + String successUrl; + if (user.getStudent() != null && user.getStudent()) { + successUrl = "../pages/overview-student.html?token="; + } else { + successUrl = "../pages/overview-docent.html?token="; + } + successUrl += management.getUserToken(user); + return forwardToLocation(successUrl); + } + + /** + * * helper function for redirecting to a new page + * + * @param existsUrl + * @return + * @throws URISyntaxException + */ + private Response forwardToLocation(String existsUrl) throws URISyntaxException { + return Response.seeOther(new URI(existsUrl)).build(); + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/utils/Category.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/utils/Category.java new file mode 100644 index 0000000000000000000000000000000000000000..0929f342834ff143da72c6ebfa74ee911138338e --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/core/management/utils/Category.java @@ -0,0 +1,11 @@ +package unipotsdam.gf.core.management.utils; + +/** + Categories for feedback and documents + created by Katharina + */ + +public enum Category { + TITEL, RECHERCHE, LITERATURVERZEICHNIS, FORSCHUNGSFRAGE, UNTERSUCHUNGSKONZEPT, METHODIK, DURCHFUEHRUNG, AUSWERTUNG +} + //Lernziele?? \ No newline at end of file diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Annotatable.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Annotatable.java deleted file mode 100644 index c674c916e9a54c721d5db795e51e09c3714fe20a..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Annotatable.java +++ /dev/null @@ -1,53 +0,0 @@ -package unipotsdam.gf.interfaces; - -import unipotsdam.gf.modules.annotation.Annotation; - -import java.util.ArrayList; - -/** - * @author Sven Kästle - * skaestle@uni-potsdam.de - */ -public interface Annotatable { - - /** - * Adds an annotation to a target and returns the new id - * - * @param newAnnotation The new annotation as an Object - * @return Returns the id of the new annotation - */ - int addAnnotation(Annotation newAnnotation); - - /** - * Alters an annotation - * - * @param annotationId The id of the original annotation - * @param newBody The new body of the annotation - */ - void alterAnnotation(int annotationId, String newBody); - - /** - * Deletes an annotation - * - * @param annotationId The id of the annotation - */ - void deleteAnnotation(int annotationId); - - /** - * Returns a specific annotation from a target - * - * @param annotationId The id of the annotation - * @param targetId The id of the target - * @return Returns a specific annotation - */ - Annotation getAnnotation(int annotationId, int targetId); - - /** - * Returns all annotations from a target - * - * @param targetIds An ArrayList of target ids - * @return Returns all annotations - */ - ArrayList<Annotation> getAnnotations(ArrayList<Integer> targetIds); - -} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IAnnotation.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IAnnotation.java new file mode 100644 index 0000000000000000000000000000000000000000..d8957a0d393696650cc86ad0216d05ea68bcfa65 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IAnnotation.java @@ -0,0 +1,62 @@ +package unipotsdam.gf.interfaces; + +import unipotsdam.gf.modules.annotation.model.Annotation; +import unipotsdam.gf.modules.annotation.model.AnnotationPatchRequest; +import unipotsdam.gf.modules.annotation.model.AnnotationPostRequest; + +import java.util.ArrayList; + +/** + * @author Sven Kästle + * skaestle@uni-potsdam.de + */ +public interface IAnnotation { + + /** + * Adds an annotation to a target and returns the new id + * + * @param annotationPostRequest The annotation post request + * @return Returns the new annotation + */ + Annotation addAnnotation(AnnotationPostRequest annotationPostRequest); + + /** + * Alters an annotation + * + * @param annotationId The id of the original annotation + * @param annotationPatchRequest The annotation patch request + */ + void alterAnnotation(String annotationId, AnnotationPatchRequest annotationPatchRequest); + + /** + * Deletes an annotation + * + * @param annotationId The id of the annotation + */ + void deleteAnnotation(String annotationId); + + /** + * Returns a specific annotation from a target + * + * @param annotationId The id of the annotation + * @return Returns a specific annotation + */ + Annotation getAnnotation(String annotationId); + + /** + * Returns all annotations from a target + * + * @param targetId the target id + * @return Returns all annotations + */ + ArrayList<Annotation> getAnnotations(int targetId); + + /** + * Checks if an annotation id already exists in the database + * + * @param annotationId The id of the annotation + * @return Returns true if the id exists + */ + boolean existsAnnotationId(String annotationId); + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java index 8a07add14391adf6779942e0225e1c38e30e9b2f..12d3d71183ae34966d1e88a04596095c22eadd42 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/ICommunication.java @@ -22,7 +22,7 @@ public interface ICommunication { List<ChatMessage> getChatHistory(String roomId); - boolean sendMessageToChat(Message message); + boolean sendMessageToChat(Message message, String roomId); /** * endpoint: https://rocket.chat/docs/developer-guides/rest-api/groups/create/ @@ -44,6 +44,8 @@ public interface ICommunication { */ boolean addUserToChatRoom(String roomId, User user); + boolean removeUserFromChatRoom(User user, String roomId); + /** * endpoint: https://rocket.chat/docs/developer-guides/rest-api/groups/settopic/ * @@ -79,4 +81,8 @@ public interface ICommunication { */ boolean registerUser(User user); + boolean registerAndLoginUser(User user); + + String getChatRoomLink(String userToken, String projectToken, String groupToken); + } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IJournal.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IJournal.java index af66e583b5f0e93479c44b98e3fb1fdb5145113f..4da8b21c8ed3871d6824944e2f90b1a19315724e 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IJournal.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IJournal.java @@ -1,6 +1,7 @@ package unipotsdam.gf.interfaces; -import unipotsdam.gf.modules.assessment.controller.StudentIdentifier; + +import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; /** * Interface for learning journal diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java index b08418626291d61ab01198c43848c3ce6bc450cd..9a23d8f4d3036c6bd9f728e7d6cc213beaa42fa1 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java @@ -1,9 +1,9 @@ package unipotsdam.gf.interfaces; -import unipotsdam.gf.modules.assessment.controller.Assessment; -import unipotsdam.gf.modules.assessment.controller.Performance; -import unipotsdam.gf.modules.assessment.controller.Quiz; -import unipotsdam.gf.modules.assessment.controller.StudentIdentifier; +import unipotsdam.gf.modules.assessment.controller.model.*; + +import java.util.ArrayList; +import java.util.List; /** * Created by dehne on 18.05.2018. @@ -17,6 +17,7 @@ public interface IPeerAssessment { */ void addAssessmentDataToDB(Assessment assessment); + Quiz getQuiz(String projectId, String groupId); /** * will return a saved assessment from the DB * @@ -28,19 +29,26 @@ public interface IPeerAssessment { /** * writes a quiz-question into the DB so other students can benefit from another's insights. * - * @param student - * @param quiz + * @param studentAndQuiz */ - void createQuiz(StudentIdentifier student, Quiz quiz); + void createQuiz(StudentAndQuiz studentAndQuiz); /** * calculate grades for everyone in a list. * either it will be overwritten by choice of co- or peer-assessment or it gets a parameter which specifies it. * - * @param performanceOfAllStudents + * + * @param totalPerformance @return + */ + List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance); // calculates marks for every performance and writes it to an array + + + /** + * + * @param studentIdentifier * @return */ - int[] calculateAssessment(Performance[] performanceOfAllStudents); // calculates marks for every performance and writes it to an array + ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier); /** * calculates the mean value of all assessments in a project. @@ -49,4 +57,21 @@ public interface IPeerAssessment { * @return */ int meanOfAssessement(String ProjectId); + + /** + * returns all quizzes in a project + * + * @param projectId + * @return all quizzes in projectId + */ + ArrayList<Quiz> getQuiz(String projectId); + + /** + * writes the peerRatings into db + * + * @param projectId + * @param groupId + * @param peerRatings + */ + void postPeerRating(String projectId, String groupId, ArrayList<PeerRating> peerRatings); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/controller/AnnotationController.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/controller/AnnotationController.java new file mode 100644 index 0000000000000000000000000000000000000000..4e6bb8e9e71c4f85ec6d31c1a18591f20a09fa30 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/controller/AnnotationController.java @@ -0,0 +1,181 @@ +package unipotsdam.gf.modules.annotation.controller; + +import unipotsdam.gf.core.database.mysql.MysqlConnect; +import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet; +import unipotsdam.gf.interfaces.IAnnotation; +import unipotsdam.gf.modules.annotation.model.Annotation; +import unipotsdam.gf.modules.annotation.model.AnnotationPatchRequest; +import unipotsdam.gf.modules.annotation.model.AnnotationPostRequest; + +import java.time.ZonedDateTime; +import java.util.ArrayList; +import java.util.UUID; + +public class AnnotationController implements IAnnotation { + @Override + public Annotation addAnnotation(AnnotationPostRequest annotationPostRequest) { + + // create a new id if we found no id. + String uuid = UUID.randomUUID().toString(); + while (existsAnnotationId(uuid)) { + uuid = UUID.randomUUID().toString(); + } + + // build the annotation + Annotation annotation = new Annotation(uuid, + ZonedDateTime.now().toEpochSecond(), + annotationPostRequest.getUserId(), + annotationPostRequest.getTargetId(), + annotationPostRequest.getBody(), + annotationPostRequest.getStartCharacter(), + annotationPostRequest.getEndCharacter()); + + // establish connection + MysqlConnect connection = new MysqlConnect(); + connection.connect(); + + // build and execute request + String request = "INSERT INTO annotations (`id`, `userId`, `targetId`, `body`, `startCharacter`, `endCharacter`) VALUES (?,?,?,?,?,?);"; + connection.issueInsertOrDeleteStatement(request, annotation.getId(), annotation.getUserId(), annotation.getTargetId(), annotation.getBody(), annotation.getStartCharacter(), annotation.getEndCharacter()); + + // close connection + connection.close(); + + return annotation; + + } + + @Override + public void alterAnnotation(String annotationId, AnnotationPatchRequest annotationPatchRequest) { + + // establish connection + MysqlConnect connection = new MysqlConnect(); + connection.connect(); + + // build and execute request + String request = "UPDATE `annotations` SET `body` = ? WHERE `id` = ?"; + connection.issueUpdateStatement(request, annotationPatchRequest.getBody(), annotationId); + + // close connection + connection.close(); + + } + + @Override + public void deleteAnnotation(String annotationId) { + + // establish connection + MysqlConnect connection = new MysqlConnect(); + connection.connect(); + + // build and execute request + String request = "DELETE FROM annotations WHERE id = ?;"; + connection.issueInsertOrDeleteStatement(request, annotationId); + + // close connection + connection.close(); + + } + + @Override + public Annotation getAnnotation(String annotationId) { + + // establish connection + MysqlConnect connection = new MysqlConnect(); + connection.connect(); + + // build and execute request + String request = "SELECT * FROM annotations WHERE id = ?;"; + VereinfachtesResultSet rs = connection.issueSelectStatement(request, annotationId); + + if (rs.next()) { + + // save annotation + Annotation annotation = getAnnotationFromResultSet(rs); + + // close connection + connection.close(); + + return annotation; + } + else { + + // close connection + connection.close(); + + return null; + } + + } + + @Override + public ArrayList<Annotation> getAnnotations(int targetId) { + + // declare annotation ArrayList + ArrayList<Annotation> annotations = new ArrayList<>(); + + // establish connection + MysqlConnect connection = new MysqlConnect(); + connection.connect(); + + // build and execute request + String request = "SELECT * FROM annotations WHERE targetId = ?;"; + VereinfachtesResultSet rs = connection.issueSelectStatement(request, targetId); + + while (rs.next()) { + annotations.add(getAnnotationFromResultSet(rs)); + } + + // close connection + connection.close(); + + return annotations; + + } + + @Override + public boolean existsAnnotationId(String annotationId) { + + // establish connection + MysqlConnect connection = new MysqlConnect(); + connection.connect(); + + // build and execute request + String request = "SELECT COUNT(*) > 0 AS `exists` FROM annotations WHERE id = ?;"; + VereinfachtesResultSet rs = connection.issueSelectStatement(request, annotationId); + + if (rs.next()) { + // save the response + int count = rs.getInt("exists"); + + // close connection + connection.close(); + + // return true if we found the id + if (count < 1) { + return false; + } + else { + return true; + } + } + + // something happened + return true; + + } + + private Annotation getAnnotationFromResultSet(VereinfachtesResultSet rs) { + + String id = rs.getString("id"); + long timestamp = rs.getTimestamp(2).getTime(); + int userId = rs.getInt("userId"); + int targetId = rs.getInt("targetId"); + String body = rs.getString("body"); + int startCharacter = rs.getInt("startCharacter"); + int endCharacter = rs.getInt("endCharacter"); + + return new Annotation(id, timestamp, userId, targetId, body, startCharacter, endCharacter); + + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/Annotation.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/Annotation.java similarity index 88% rename from gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/Annotation.java rename to gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/Annotation.java index 5535a7b95b14412e5f431d4d1b79c9b6bfdb73bc..725967353f5685e93c53302b7a8a0e799e4ccc12 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/Annotation.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/Annotation.java @@ -1,4 +1,4 @@ -package unipotsdam.gf.modules.annotation; +package unipotsdam.gf.modules.annotation.model; /** * @author Sven Kästle @@ -7,7 +7,7 @@ package unipotsdam.gf.modules.annotation; public class Annotation { // variables - private int id; + private String id; private long timestamp; private int userId; private int targetId; @@ -16,7 +16,7 @@ public class Annotation { private int endCharacter; // constructor - public Annotation(int id, long timestamp, int userId, int targetId, String body, int startCharacter, int endCharacter) { + public Annotation(String id, long timestamp, int userId, int targetId, String body, int startCharacter, int endCharacter) { this.id = id; this.timestamp = timestamp; this.userId = userId; @@ -27,11 +27,11 @@ public class Annotation { } // methods - public int getId() { + public String getId() { return id; } - public void setId(int id) { + public void setId(String id) { this.id = id; } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPatchRequest.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPatchRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..c41e294afda5094833771b48bef3c18656c1f283 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPatchRequest.java @@ -0,0 +1,35 @@ +package unipotsdam.gf.modules.annotation.model; + +/** + * @author Sven Kästle + * skaestle@uni-potsdam.de + */ +public class AnnotationPatchRequest { + + // variables + private String body; + + // constructors + public AnnotationPatchRequest(String body) { + this.body = body; + } + + public AnnotationPatchRequest() {} + + // methods + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + @Override + public String toString() { + return "AnnotationPatchRequest{" + + "body='" + body + '\'' + + '}'; + } + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPostRequest.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPostRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..5459cb5b567c1aa2224642c2ef304007b954ba7e --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationPostRequest.java @@ -0,0 +1,79 @@ +package unipotsdam.gf.modules.annotation.model; + +/** + * @author Sven Kästle + * skaestle@uni-potsdam.de + */ +public class AnnotationPostRequest { + + // variables + private int userId; + private int targetId; + private String body; + private int startCharacter; + private int endCharacter; + + // constructors + public AnnotationPostRequest(int userId, int targetId, String body, int startCharacter, int endCharacter) { + this.userId = userId; + this.targetId = targetId; + this.body = body; + this.startCharacter = startCharacter; + this.endCharacter = endCharacter; + } + + public AnnotationPostRequest() { + } + + // methods + public int getUserId() { + return userId; + } + + public void setUserId(int userId) { + this.userId = userId; + } + + public int getTargetId() { + return targetId; + } + + public void setTargetId(int targetId) { + this.targetId = targetId; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + public int getStartCharacter() { + return startCharacter; + } + + public void setStartCharacter(int startCharacter) { + this.startCharacter = startCharacter; + } + + public int getEndCharacter() { + return endCharacter; + } + + public void setEndCharacter(int endCharacter) { + this.endCharacter = endCharacter; + } + + @Override + public String toString() { + return "AnnotationPostRequest{" + + "userId=" + userId + + ", targetId=" + targetId + + ", body='" + body + '\'' + + ", startCharacter=" + startCharacter + + ", endCharacter=" + endCharacter + + '}'; + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationResponse.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationResponse.java new file mode 100644 index 0000000000000000000000000000000000000000..045986bdf8fbd7ccb6a4dadbe1142ade3c3ff9ae --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/model/AnnotationResponse.java @@ -0,0 +1,37 @@ +package unipotsdam.gf.modules.annotation.model; + +/** + * @author Sven Kästle + * skaestle@uni-potsdam.de + */ +public class AnnotationResponse { + + // variables + String message; + + // constructors + public AnnotationResponse(String message) { + this.message = message; + } + + public AnnotationResponse() { + + } + + // methods + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + @Override + public String toString() { + return "AnnotationResponse{" + + "message='" + message + '\'' + + '}'; + } + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/view/AnnotationService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/view/AnnotationService.java new file mode 100644 index 0000000000000000000000000000000000000000..1072cd55891857bc8fa1d2d9ece561f5b105da81 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/annotation/view/AnnotationService.java @@ -0,0 +1,131 @@ +package unipotsdam.gf.modules.annotation.view; + +import io.dropwizard.jersey.PATCH; +import unipotsdam.gf.modules.annotation.controller.AnnotationController; +import unipotsdam.gf.modules.annotation.model.Annotation; +import unipotsdam.gf.modules.annotation.model.AnnotationPatchRequest; +import unipotsdam.gf.modules.annotation.model.AnnotationPostRequest; +import unipotsdam.gf.modules.annotation.model.AnnotationResponse; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.ArrayList; + +/** + * @author Sven Kästle + * skaestle@uni-potsdam.de + */ +@Path("/annotations") +@Consumes(MediaType.APPLICATION_JSON) +@Produces(MediaType.APPLICATION_JSON) +public class AnnotationService { + + @POST + public Response createAnnotation(AnnotationPostRequest request) { + + // save annotation request in database and receive the new annotation object + AnnotationController controller = new AnnotationController(); + Annotation annotation = controller.addAnnotation(request); + + return Response.ok(annotation).build(); + + } + + @PATCH + @Path("{id}") + public Response alterAnnotation(@PathParam("id") String annotationId, AnnotationPatchRequest request) { + + // declare response + AnnotationResponse response = new AnnotationResponse(); + + // check if annotation exists + AnnotationController controller = new AnnotationController(); + boolean exists = controller.existsAnnotationId(annotationId); + + if (exists) { + // alter annotation and response 200 + controller.alterAnnotation(annotationId, request); + response.setMessage("Altered the annotation with the id " + annotationId); + + return Response.ok(response).build(); + } + else { + // no annotation with the given id, response 404 + response.setMessage("Annotation with the id '" + annotationId + "' can't be found"); + + return Response.status(Response.Status.NOT_FOUND).entity(response).build(); + } + + } + + @DELETE + @Path("{id}") + public Response deleteAnnotation(@PathParam("id") String annotationId) { + + // declare response + AnnotationResponse response = new AnnotationResponse(); + + // check if annotation exists + AnnotationController controller = new AnnotationController(); + boolean exists = controller.existsAnnotationId(annotationId); + + if (exists) { + // delete annotation and response 200 + controller.deleteAnnotation(annotationId); + response.setMessage("Deleted the annotation with the id " + annotationId); + + return Response.ok(response).build(); + } + else { + // no annotation with the given id, response 404 + response.setMessage("Annotation with the id '" + annotationId + "' can't be found"); + + return Response.status(Response.Status.NOT_FOUND).entity(response).build(); + } + + } + + @GET + @Path("{id}") + public Response getAnnotation(@PathParam("id") String annotationId) { + + // receive the annotation + AnnotationController controller = new AnnotationController(); + Annotation annotation = controller.getAnnotation(annotationId); + + if (annotation != null) { + return Response.ok(annotation).build(); + } + else { + // declare response + AnnotationResponse response = new AnnotationResponse(); + response.setMessage("Annotation with the id '" + annotationId + "' can't be found"); + + return Response.status(Response.Status.NOT_FOUND).entity(response).build(); + } + + } + + @GET + @Path("/target/{id}") + public Response getAnnotations(@PathParam("id") int targetId) { + + // receive the annotation + AnnotationController controller = new AnnotationController(); + ArrayList<Annotation> annotations = controller.getAnnotations(targetId); + + if (!annotations.isEmpty()) { + return Response.ok(annotations).build(); + } + else { + // declare response + AnnotationResponse response = new AnnotationResponse(); + response.setMessage("Found no annotations for the target id '" + targetId + "'"); + + return Response.status(Response.Status.NOT_FOUND).entity(response).build(); + } + + } + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/FBAssessement.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/FBAssessement.java deleted file mode 100644 index 0890abdcf4ddf3d7fcb7dd8c599fbb097c41b4c3..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/FBAssessement.java +++ /dev/null @@ -1,41 +0,0 @@ -package unipotsdam.gf.modules.assessment.controller; - -/** - * Created by dehne on 18.05.2018. - */ -public class FBAssessement extends AssessmentDAO { - - @Override - public void addAssessmentDataToDB(Assessment assessment) { - // write it to db - } - - @Override - public void createQuiz(StudentIdentifier student, Quiz quiz) { - - } - - - @Override - public int[] calculateAssessment(Performance[] performanceOfAllStudents){ // calculates marks for every performance and writes it to an array - int[] dummy = new int[4]; - dummy[0]=1; - dummy[1]=4; - dummy[2]=3; - dummy[3]=2; - return dummy; - } - - public void createQuiz(StudentIdentifier student, String question, String[] answers){ //writes a new question into the DB - - } - - public boolean permission(int feedbackCount){ - return true; - } - - @Override - public int meanOfAssessement(String projectId) { - return 0; - } -} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/Assessment.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Assessment.java similarity index 75% rename from gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/Assessment.java rename to gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Assessment.java index bfd450bcdae514d309b19919e39e50557df956ef..7b269aa7f1059c0446d314714ffb38761f1d8e94 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/Assessment.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Assessment.java @@ -1,4 +1,9 @@ -package unipotsdam.gf.modules.assessment.controller; +package unipotsdam.gf.modules.assessment.controller.model; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.ArrayList; + +@XmlRootElement public class Assessment { private StudentIdentifier student; @@ -9,6 +14,10 @@ public class Assessment { this.performance = performance; } + public Assessment(){} + + public ArrayList<Performance> getTotalAssessment() { return null; } + public StudentIdentifier getStudent() { return student; } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Grading.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Grading.java new file mode 100644 index 0000000000000000000000000000000000000000..81cbafa7df8add48d8c1c5bb7469984ca12915c3 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Grading.java @@ -0,0 +1,38 @@ +package unipotsdam.gf.modules.assessment.controller.model; + +public class Grading { + private StudentIdentifier studentIdentifier; + private double grade; + + public Grading(){} + + public Grading(StudentIdentifier studentIdentifier, double grade) { + this.studentIdentifier = studentIdentifier; + this.grade = grade; + } + + public double getGrade() { + return grade; + } + + public void setGrade(int grade) { + this.grade = grade; + } + + public StudentIdentifier getStudentIdentifier() { + return studentIdentifier; + } + + public void setStudentIdentifier(StudentIdentifier studentIdentifier) { + this.studentIdentifier = studentIdentifier; + } + + @Override + public String toString() { + return "Grading{" + + "studentIdentifier=" + studentIdentifier + + ", grade=" + grade + + '}'; + } + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/PeerRating.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/PeerRating.java new file mode 100644 index 0000000000000000000000000000000000000000..80d35be34f8e6208f5c436d267e4d6e93b391129 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/PeerRating.java @@ -0,0 +1,51 @@ +package unipotsdam.gf.modules.assessment.controller.model; + +import java.util.Arrays; + +public class PeerRating { + private String fromPeer; + private String toPeer; + private int[] workRating; + + @Override + public String toString() { + return "PeerRating{" + + "fromPeer='" + fromPeer + '\'' + + ", toPeer='" + toPeer + '\'' + + ", workRating=" + Arrays.toString(workRating) + + '}'; + } + + public String getFromPeer() { + return fromPeer; + } + + public PeerRating() { + } + + public void setFromPeer(String fromPeer) { + this.fromPeer = fromPeer; + } + + public String getToPeer() { + return toPeer; + } + + public void setToPeer(String toPeer) { + this.toPeer = toPeer; + } + + public int[] getWorkRating() { + return workRating; + } + + public void setWorkRating(int[] workRating) { + this.workRating = workRating; + } + + public PeerRating(String fromPeer, String toPeer, int[] workRating) { + this.fromPeer = fromPeer; + this.toPeer = toPeer; + this.workRating = workRating; + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/Performance.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java similarity index 53% rename from gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/Performance.java rename to gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java index 7e05864f14a3ca635153d0e1622abac7de3f67cd..41a74ef307f07b7f2953183ac2f1b18eba61159e 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/Performance.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Performance.java @@ -1,16 +1,29 @@ -package unipotsdam.gf.modules.assessment.controller; +package unipotsdam.gf.modules.assessment.controller.model; import java.util.Arrays; public class Performance { + private StudentIdentifier studentIdentifier; private int[] quizAnswer; private String feedback; private int[] workRating; - public Performance(int[] quizAnswer, String feedback, int[] workRating) { - this.quizAnswer = quizAnswer; - this.feedback = feedback; - this.workRating = workRating; + public Performance(){} + + public Performance(StudentIdentifier student, int[] quiz, String feedback, int[] workRating) { + this.studentIdentifier = student; + this.quizAnswer = quiz; + this.feedback=feedback; + this.workRating=workRating; + + } + + public StudentIdentifier getStudentIdentifier() { + return studentIdentifier; + } + + public void setStudentIdentifier(StudentIdentifier studentIdentifier) { + this.studentIdentifier = studentIdentifier; } public int[] getQuizAnswer() { @@ -37,12 +50,15 @@ public class Performance { this.workRating = workRating; } + @Override public String toString() { return "Performance{" + - "quizAnswer=" + Arrays.toString(quizAnswer) + + "studentIdentifier=" + studentIdentifier + + ", quizAnswer=" + Arrays.toString(quizAnswer) + ", feedback='" + feedback + '\'' + ", workRating=" + Arrays.toString(workRating) + '}'; } + } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/Quiz.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Quiz.java similarity index 88% rename from gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/Quiz.java rename to gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Quiz.java index cc3bab9653370c44cc1a7074c61c369c1a1429ae..7abafb133a623a85028716af0e484734f06c93d9 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/Quiz.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/Quiz.java @@ -1,4 +1,8 @@ -package unipotsdam.gf.modules.assessment.controller; +package unipotsdam.gf.modules.assessment.controller.model; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement public class Quiz { private String type; @@ -12,6 +16,7 @@ public class Quiz { this.correctAnswers = correctAnswers; this.incorrectAnswers = incorrectAnswers; } + public Quiz(){} public String[] getIncorrectAnswers() { return incorrectAnswers; diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/StudentAndQuiz.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/StudentAndQuiz.java new file mode 100644 index 0000000000000000000000000000000000000000..4f5f5c0976bffc1bc51602c7c1cc886f294ac1d5 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/StudentAndQuiz.java @@ -0,0 +1,38 @@ +package unipotsdam.gf.modules.assessment.controller.model; + +public class StudentAndQuiz { + @Override + public String toString() { + return "StudentAndQuiz{" + + "studentIdentifier=" + studentIdentifier + + ", quiz=" + quiz + + '}'; + } + + public StudentAndQuiz(){} + + private StudentIdentifier studentIdentifier; + + public StudentIdentifier getStudentIdentifier() { + return studentIdentifier; + } + + public void setStudentIdentifier(StudentIdentifier studentIdentifier) { + this.studentIdentifier = studentIdentifier; + } + + public Quiz getQuiz() { + return quiz; + } + + public void setQuiz(Quiz quiz) { + this.quiz = quiz; + } + + private Quiz quiz; + + public StudentAndQuiz(StudentIdentifier studentIdentifier, Quiz quiz) { + this.studentIdentifier = studentIdentifier; + this.quiz = quiz; + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/StudentIdentifier.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/StudentIdentifier.java similarity index 88% rename from gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/StudentIdentifier.java rename to gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/StudentIdentifier.java index 05799b86895153a95fce2fe5e2243f622c0e7df4..22206d27bf157dcefbb5106a3de74af3cfe68050 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/StudentIdentifier.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/model/StudentIdentifier.java @@ -1,4 +1,4 @@ -package unipotsdam.gf.modules.assessment.controller; +package unipotsdam.gf.modules.assessment.controller.model; public class StudentIdentifier { private String projectId; @@ -9,6 +9,9 @@ public class StudentIdentifier { this.studentId = studentId; } + public StudentIdentifier() { + } + public String getProjectId() { return projectId; } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/AssessmentDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDAO.java similarity index 57% rename from gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/AssessmentDAO.java rename to gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDAO.java index ed7b43d3a6eff9b5a21da1c95feadbb73fefc973..554c9f998dc3f87885b4a36a82b8b955cf1f29e5 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/AssessmentDAO.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDAO.java @@ -1,7 +1,9 @@ -package unipotsdam.gf.modules.assessment.controller; +package unipotsdam.gf.modules.assessment.controller.service; import unipotsdam.gf.interfaces.IPeerAssessment; +import unipotsdam.gf.modules.assessment.controller.model.Assessment; +import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; /** * Created by dehne on 18.05.2018. diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java new file mode 100644 index 0000000000000000000000000000000000000000..3368ce839633cd4e5172cffdad36fca4031604cb --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java @@ -0,0 +1,60 @@ +package unipotsdam.gf.modules.assessment.controller.service; + +import unipotsdam.gf.modules.assessment.controller.model.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by dehne on 18.05.2018. + */ +public class FBAssessement extends AssessmentDAO { + + @Override + public void addAssessmentDataToDB(Assessment assessment) { + // write it to db + } + + @Override + public Quiz getQuiz(String projectId, String groupId) { + return null; + } + + @Override + public void createQuiz(StudentAndQuiz studentAndQuiz) { + + } + + @Override + public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) { + return null; + } + + @Override + public ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier) { + return null; + } + + public void createQuiz(StudentIdentifier student, String question, String[] answers){ //writes a new question into the DB + + } + + public boolean permission(int feedbackCount){ + return true; + } + + @Override + public int meanOfAssessement(String projectId) { + return 0; + } + + @Override + public ArrayList<Quiz> getQuiz(String projectId) { + return null; + } + + @Override + public void postPeerRating(String projectId, String groupId, ArrayList<PeerRating> peerRatings) { + + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java new file mode 100644 index 0000000000000000000000000000000000000000..418f4fed993a364cb82b9ea4793dc066d9a9b75f --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java @@ -0,0 +1,54 @@ +package unipotsdam.gf.modules.assessment.controller.service; + +import unipotsdam.gf.interfaces.IPeerAssessment; +import unipotsdam.gf.modules.assessment.controller.model.*; + +import java.util.ArrayList; +import java.util.List; + +public class PeerAssessment implements IPeerAssessment { + @Override + public void addAssessmentDataToDB(Assessment assessment) { + + } + + @Override + public Quiz getQuiz(String projectId, String groupId) { + return null; + } + + @Override + public Assessment getAssessmentDataFromDB(StudentIdentifier student) { + return null; + } + + @Override + public void createQuiz(StudentAndQuiz studentAndQuiz) { + + } + + @Override + public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) { + return null; + } + + @Override + public ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier) { + return null; + } + + @Override + public int meanOfAssessement(String ProjectId) { + return 0; + } + + @Override + public ArrayList<Quiz> getQuiz(String projectId) { + return null; + } + + @Override + public void postPeerRating(String projectId, String groupId, ArrayList<PeerRating> peerRatings) { + + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java new file mode 100644 index 0000000000000000000000000000000000000000..6d7e933916299299ee0c696da4ec8b372bf18848 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java @@ -0,0 +1,108 @@ +package unipotsdam.gf.modules.assessment.controller.service; + +import unipotsdam.gf.interfaces.IPeerAssessment; +import unipotsdam.gf.modules.assessment.controller.model.*; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class PeerAssessmentDummy implements IPeerAssessment { + @Override + public void addAssessmentDataToDB(Assessment assessment) { + } + + @Override + public Quiz getQuiz(String projectId, String quizId) { + String[] correctAnswers = new String[2]; + Quiz sampleQuiz; + if (quizId.equals("2")) { + correctAnswers[0] = "42"; + correctAnswers[1] = "" + projectId + " " + quizId; + String[] wrongAnswers = {"a god created creature", "a sum of my mistakes"}; + sampleQuiz = new Quiz("multiple", "Who am I and if so, how many?", correctAnswers, wrongAnswers); + } else { + correctAnswers[0] = "ja, nicht?!"; + correctAnswers[1] = "nee, oder doch?!"; + String[] wrongAnswers = {"Mephistopheles", "Der alte Hexenmeister!?", "Der Schimmelreiter", "alle beide"}; + sampleQuiz = new Quiz("multiple", "Ist das nun des Pudels wahrer Kern?", correctAnswers, wrongAnswers); + } + + return sampleQuiz; + } + + public ArrayList<Quiz> getQuiz(String projectId) { + String[] correctAnswers1 = new String[2]; + ArrayList<Quiz> sampleQuiz = new ArrayList<Quiz>(); + correctAnswers1[0] = "42"; + correctAnswers1[1] = "" + projectId + " 24"; + String[] wrongAnswers = {"a god created creature", "a sum of my mistakes"}; + sampleQuiz.add(new Quiz("multiple", "Who am I and if so, how many?", correctAnswers1, wrongAnswers)); + + String[] correctAnswers2 = new String[2]; + correctAnswers2[0] = "ja, nicht?!"; + correctAnswers2[1] = "nee, oder doch?!"; + wrongAnswers = new String[]{"Mephistopheles", "Der alte Hexenmeister!?", "Der Schimmelreiter", "alle beide"}; + sampleQuiz.add(new Quiz("multiple", "Ist das nun des Pudels wahrer Kern?", correctAnswers2, wrongAnswers)); + + return sampleQuiz; +} + + @Override + public void postPeerRating(String projectId, String groupId, ArrayList<PeerRating> peerRatings) { + int breakpoint = 0; + } + + @Override + public Assessment getAssessmentDataFromDB(StudentIdentifier student) { + int[] quizAnswer = {1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1}; + int[] workRating = {1, 5, 3, 4, 1, 5, 5}; + Performance performance = new Performance(student, quizAnswer, "what a nice guy", workRating); + Assessment assessment = new Assessment(student, performance); + return assessment; + } + + @Override + public void createQuiz(StudentAndQuiz studentAndQuiz) { + } + + @Override + public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) { + double[] allAssessements = new double[totalPerformance.size()]; + Grading[] grading = new Grading[totalPerformance.size()]; + + for (int i = 0; i < totalPerformance.size(); i++) { + for (int j = 0; j < totalPerformance.get(i).getQuizAnswer().length; j++) { + allAssessements[i] += totalPerformance.get(i).getQuizAnswer()[j]; + } + allAssessements[i] = allAssessements[i] / totalPerformance.get(i).getQuizAnswer().length; + } + for (int i = 0; i < totalPerformance.size(); i++) { + Grading shuttle = new Grading(totalPerformance.get(i).getStudentIdentifier(), allAssessements[i]); + grading[i] = shuttle; + } + return Arrays.asList(grading); + } + + @Override + public ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier) { + StudentIdentifier[] students = new StudentIdentifier[2]; + StudentIdentifier student1 = new StudentIdentifier("gemeinsamForschen", "Haralf"); + StudentIdentifier student2 = new StudentIdentifier("gemeinsamForschen", "Regine"); + ArrayList<Performance> performances = new ArrayList<Performance>(); + int[] quiz = {1, 0, 1, 0, 0, 0, 1}; + int[] quiz2 = {0, 1, 0, 1, 1, 1, 0}; + int[] work = {5, 4, 3, 2, 1}; + int[] work2 = {1, 2, 3, 4, 5}; + Performance performance = new Performance(student1, quiz, "toller dude", work); + performances.add(performance); + performance = new Performance(student2, quiz2, "tolle dudine", work2); + performances.add(performance); + return performances; + } + + @Override + public int meanOfAssessement(String ProjectId) { + return 0; + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java new file mode 100644 index 0000000000000000000000000000000000000000..077ebb237b82d80b98d3ac19911fba729d5494ea --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java @@ -0,0 +1,118 @@ +package unipotsdam.gf.modules.assessment.controller.view; + +import unipotsdam.gf.interfaces.IPeerAssessment; +import unipotsdam.gf.modules.assessment.controller.model.*; +import unipotsdam.gf.modules.assessment.controller.service.PeerAssessmentDummy; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import java.util.ArrayList; +import java.util.List; + +@Path("/assessments") +public class QuizView implements IPeerAssessment { + private static IPeerAssessment peer = new PeerAssessmentDummy(); + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/project/{projectId}/quiz/{quizId}") + @Override + public Quiz getQuiz(@PathParam("projectId") String projectId, @PathParam("quizId") String quizId) { + return peer.getQuiz(projectId, quizId); + } ///////////////////////////////funktioniert wie geplant////////////////////////////////// + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/project/{projectId}/quiz") + @Override + public ArrayList<Quiz> getQuiz(@PathParam("projectId") String projectId) { + return peer.getQuiz(projectId); + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Path("/peer/project/{projectId}/group/{groupId}") + @Override + public void postPeerRating(@PathParam("projectId") String projectId, @PathParam("groupId") String groupId, ArrayList<PeerRating> peerRatings){ + peer.postPeerRating(projectId,groupId,peerRatings); + } + + @POST + @Produces(MediaType.TEXT_PLAIN) + @Consumes(MediaType.APPLICATION_JSON) + @Path("/assessment") + @Override + public void addAssessmentDataToDB(Assessment assessment) { + peer.addAssessmentDataToDB(assessment); + } + + + @Override + public Assessment getAssessmentDataFromDB(StudentIdentifier student){ + return peer.getAssessmentDataFromDB(student); + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/project/{projectId}/student/{studentId}") + public Assessment getAssessmentDataFromDB(@PathParam("projectId") String projectId,@PathParam("studentId") String studentId){ + StudentIdentifier student = new StudentIdentifier(projectId, studentId); + return getAssessmentDataFromDB(student); + } ///////////////////////////////funktioniert wie geplant////////////////////////////////// + + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/quiz") + @Override + public void createQuiz(StudentAndQuiz studentAndQuiz) { + peer.createQuiz(studentAndQuiz); + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/calculate") + @Override + public List<Grading> calculateAssessment(ArrayList<Performance> totalPerformance) { + return peer.calculateAssessment(totalPerformance); + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/mean/project/{projectId}") + @Override + public int meanOfAssessement(@PathParam("projectId") String ProjectId) { + + return peer.meanOfAssessement(ProjectId); + } ///////////////////////////////return 0////////////////////////////////// + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/total/project/{projectId}/student/{student}") + public ArrayList<Performance> getTotalAssessment(@PathParam("projectId") String ProjectId,@PathParam("student") String student){ + StudentIdentifier studentIdentifier = new StudentIdentifier(ProjectId, student); + return getTotalAssessment(studentIdentifier); + } ///////////////////////////////funktioniert wie geplant////////////////////////////////// + + @Override + public ArrayList<Performance> getTotalAssessment(StudentIdentifier studentIdentifier) { + return peer.getTotalAssessment(studentIdentifier); + } ///////////////////////////////funktioniert wie geplant////////////////////////////////// + + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/dummy/totalperformance") + public List<Performance> getTotalAssessment() { + ArrayList<Performance> result = new ArrayList<>(); + StudentIdentifier student = new StudentIdentifier("projekt","student"); + int[] quiz = {1,0,1,1,1,0}; + Performance pf = new Performance(student,quiz,"toller dude",quiz); + Performance pf2 = new Performance(student,quiz,"super",quiz); + result.add(pf); + result.add(pf2); + return result; + } ///////////////////////////////returns what i expect it to return!!!!!////////////////////////////////// + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/ChatWindow.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/ChatWindow.java new file mode 100644 index 0000000000000000000000000000000000000000..9fa51312f3f086cdacfd1dd25bc21612dccffbc8 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/ChatWindow.java @@ -0,0 +1,40 @@ +package unipotsdam.gf.modules.communication; + +import unipotsdam.gf.core.management.ManagementImpl; +import unipotsdam.gf.interfaces.ICommunication; +import unipotsdam.gf.modules.communication.service.CommunicationDummyService; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.PageContext; +import javax.servlet.jsp.tagext.SimpleTagSupport; +import java.io.IOException; + +public class ChatWindow extends SimpleTagSupport { + + private String orientation; + + public void doTag() throws IOException { + PageContext pageContext = (PageContext) getJspContext(); + HttpServletRequest request = (HttpServletRequest) pageContext.getRequest(); + String token = request.getParameter("token"); + ManagementImpl management = new ManagementImpl(); + //User user = management.getUserByToken(token); + String groupToken = request.getParameter("groupToken"); + String projectToken = request.getParameter("projectToken"); + //get ProjetbyToken + ICommunication communicationService = new CommunicationDummyService(); + String chatRoomLink = communicationService.getChatRoomLink(token,projectToken,groupToken); + + JspWriter out = getJspContext().getOut(); + out.println("<iframe width=\"30%\" height=\"100%\" src=\""+chatRoomLink+"\"/>"); + } + + public void setOrientation(String orientation) { + this.orientation = orientation; + } + + public String getOrientation() { + return orientation; + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java index f659a3620b974c75bbf237c2453b4b30c92d1356..3d989429228f1c213263794b0df7c741f87507cb 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/service/CommunicationDummyService.java @@ -1,46 +1,68 @@ package unipotsdam.gf.modules.communication.service; +import unipotsdam.gf.config.Constants; +import unipotsdam.gf.core.management.Management; import unipotsdam.gf.core.management.user.User; import unipotsdam.gf.interfaces.ICommunication; import unipotsdam.gf.modules.communication.model.Message; import unipotsdam.gf.modules.communication.model.chat.ChatMessage; import unipotsdam.gf.modules.communication.model.chat.ChatRoom; +import javax.annotation.ManagedBean; +import javax.annotation.Resource; +import javax.inject.Inject; +import javax.inject.Singleton; import java.time.Instant; import java.util.ArrayList; import java.util.List; +import java.util.Objects; +@Resource +@ManagedBean +@Singleton public class CommunicationDummyService implements ICommunication { + @Inject + Management managementService; + @Override public List<ChatMessage> getChatHistory(String roomId) { ArrayList<ChatMessage> chatMessages = new ArrayList<>(); int maxValue = 6; - for (int i = 1;i <= maxValue;i++) { - chatMessages.add(new ChatMessage(String.valueOf(i+1), "Dies ist ein Test" + i + " .", - Instant.now().minusSeconds(maxValue * 10 - i * 10),"testUser" + i)); + for (int i = 1; i <= maxValue; i++) { + chatMessages.add(new ChatMessage(String.valueOf(i), "Dies ist ein Test " + i + ".", + Instant.now().minusSeconds(maxValue * 10 - i * 10), "testUser" + i)); } return chatMessages; } @Override - public boolean sendMessageToChat(Message message) { - throw new RuntimeException("Do not call this method without implementation"); + public boolean sendMessageToChat(Message message, String roomId) { + return true; } @Override public String createChatRoom(String name, List<User> users) { + if (Objects.isNull(users)) { + return "2"; + } + return "1"; } @Override public boolean addUserToChatRoom(String roomId, User user) { - throw new RuntimeException("Do not call this method without implementation"); + return true; + } + + @Override + public boolean removeUserFromChatRoom(User user, String roomId) { + return true; } @Override public boolean setChatRoomTopic(String roomId, String topic) { - throw new RuntimeException("Do not call this method without implementation"); + return true; } @Override @@ -50,7 +72,6 @@ public class CommunicationDummyService implements ICommunication { @Override public boolean loginUser(User user) { - user.setRocketChatId("1"); user.setRocketChatAuthToken("abc"); return true; } @@ -60,4 +81,28 @@ public class CommunicationDummyService implements ICommunication { user.setRocketChatId("1"); return true; } + + @Override + public boolean registerAndLoginUser(User user) { + // TODO: try to login user first --> if it fails there is no user, register afterwards or add exists function + if (!registerUser(user)) { + return false; + } + return loginUser(user); + + } + + public String getChatRoomLink(String userToken, String projectToken, String groupToken) { + //User user = managementService.getUserByToken(userToken); + // TODO: Implement getProjectbyToken and getGroupByToken + //Project project = managementService.getProject(projectToken + String channelName = "general"; + return Constants.ROCKET_CHAT_URL + "/channel/" + channelName + "?layout=embedded"; + } + + // TODO: remove after done implementing + // just for postman testing + public User getUser() { + return new User("Martin Stähr", "test", "test@test.com", true); + } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/view/CommunicationView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/view/CommunicationView.java new file mode 100644 index 0000000000000000000000000000000000000000..bc2c6ff9fa0638e8a8feb9c12b902f545c19dfe4 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/communication/view/CommunicationView.java @@ -0,0 +1,186 @@ +package unipotsdam.gf.modules.communication.view; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.interfaces.ICommunication; +import unipotsdam.gf.modules.communication.model.Message; +import unipotsdam.gf.modules.communication.model.chat.ChatMessage; +import unipotsdam.gf.modules.communication.model.chat.ChatRoom; +import unipotsdam.gf.modules.communication.service.CommunicationDummyService; + +import javax.annotation.ManagedBean; +import javax.inject.Inject; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.List; + +import static java.util.Objects.isNull; + +@Path("/chat") +@ManagedBean +public class CommunicationView { + + private static final Logger log = LoggerFactory.getLogger(CommunicationView.class); + + @Inject + private ICommunication communicationService; + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/info/{roomId}") + public Response getChatRoomInformation(@PathParam("roomId") String roomId) { + ChatRoom chatRoom = communicationService.getChatRoomInfo(roomId); + if (isNull(chatRoom)) { + log.error("chatRoom not found for roomId: {}", roomId); + return Response.status(Response.Status.NOT_FOUND).build(); + } + log.trace("getChatRoomInformationResponse: {}", chatRoom); + return Response.ok(chatRoom).build(); + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("/history/{roomId}") + public Response getChatHistory(@PathParam("roomId") String roomId) { + List<ChatMessage> chatMessages = communicationService.getChatHistory(roomId); + if (isNull(chatMessages)) { + log.error("getChatHistory: chatRoom not found for roomId: {}", roomId); + return Response.status(Response.Status.NOT_FOUND).build(); + } + log.trace("response for getChatHistory: {}", chatMessages); + return Response.ok(chatMessages).build(); + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/send/{roomId}") + public Response sendMessage(Message message, @PathParam("roomId") String roomId) { + if (isNull(message)) { + log.trace("sendMessage message object was null"); + return Response.status(Response.Status.BAD_REQUEST).entity("must provide message").build(); + } + boolean wasSend = communicationService.sendMessageToChat(message, roomId); + Response response; + if (wasSend) { + log.trace("response for sendMessage: {}", wasSend); + response = Response.ok(wasSend).build(); + } else { + log.error("error while sending message for message: {}", message); + response = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("error while sending message").build(); + } + return response; + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/addUser/{roomId}") + public Response addUserToChatRoom(@PathParam("roomId") String roomId, User user) { + if (isNull(user)) { + log.trace("addUser user object was null"); + return Response.status(Response.Status.BAD_REQUEST).entity("must provide user").build(); + } + boolean wasAdded = communicationService.addUserToChatRoom(roomId, user); + if (isNull(wasAdded)) { + log.error("addUserToChatRoom: chatRoom not found for roomId: {}, user: {}", roomId, user); + return Response.status(Response.Status.NOT_FOUND).build(); + } + Response response; + if (wasAdded) { + log.trace("response for addUser: {}", wasAdded); + response = Response.ok(wasAdded).build(); + } else { + log.error("error while adding user to chat room"); + response = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("error while adding user to chatRoom").build(); + } + return response; + } + + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/removeUser/{roomId}") + public Response removeUserFromChatRoom(User user, @PathParam("roomId") String roomId) { + if (isNull(user)) { + log.trace("removeUser user object was null"); + return Response.status(Response.Status.BAD_REQUEST).entity("must provide user").build(); + } + boolean wasRemoved = communicationService.removeUserFromChatRoom(user, roomId); + if (isNull(wasRemoved)) { + log.error("removeUserToChatRoom: chatRoom not found for roomId: {}, user: {}", roomId, user); + return Response.status(Response.Status.NOT_FOUND).build(); + } + Response response; + if (wasRemoved) { + log.trace("response for removeUser: {}", wasRemoved); + response = Response.ok(wasRemoved).build(); + } else { + log.error("error while adding user to chat room"); + response = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("error while adding user to chatRoom").build(); + } + return response; + } + + @POST + @Produces(MediaType.APPLICATION_JSON) + @Path("/setTopic/{roomId}") + public Response setChatRoomTopic(@PathParam("roomId") String roomId, @QueryParam("topic") String topic) { + if (isNull(topic)) { + log.trace("setTopic param not given"); + return Response.status(Response.Status.BAD_REQUEST).entity("topic must be not empty").build(); + } + boolean wasSet = communicationService.setChatRoomTopic(roomId, topic); + if (isNull(wasSet)) { + log.error("addChatRoomTopic: chatRoom not found for roomId: {}, topic: {}", roomId, topic); + return Response.status(Response.Status.NOT_FOUND).build(); + } + Response response; + if (wasSet) { + log.trace("response for setTopic: {}", wasSet); + response = Response.ok(wasSet).build(); + } else { + log.error("error while setting topic to chat room"); + response = Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("error while setting topic to chat room").build(); + } + return response; + } + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Path("/create") + public Response createChatRoom(@QueryParam("name") String name, List<User> users) { + if (isNull(name)) { + return Response.status(Response.Status.BAD_REQUEST).entity("must provide name as queryParam").build(); + } + String chatId = communicationService.createChatRoom(name, users); + if (isNull(chatId)) { + log.error("error while creating chatRoom for: name: {}, users: {}", name, users); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).build(); + } + log.trace("response for createChatRoom: {}", chatId); + return Response.status(Response.Status.CREATED).entity(chatId).build(); + } + + // Temp: just get user as json + // TODO: remove after done implementing + @GET + @Path("/user") + @Produces(MediaType.APPLICATION_JSON) + public Response getUser() { + User user = ((CommunicationDummyService) communicationService).getUser(); + return Response.ok(user).build(); + } + + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupCreation/service/GroupCreationService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupCreation/service/GroupCreationService.java new file mode 100644 index 0000000000000000000000000000000000000000..23127b12dc29e93f9d76e299c81619229fab16e4 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/groupCreation/service/GroupCreationService.java @@ -0,0 +1,97 @@ +package unipotsdam.gf.modules.groupCreation.service; + +import unipotsdam.gf.core.management.Management; +import unipotsdam.gf.core.management.group.Group; +import unipotsdam.gf.core.management.project.Project; +import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.core.management.user.UserProfile; +import unipotsdam.gf.interfaces.ICommunication; + +import javax.annotation.ManagedBean; +import javax.annotation.Resource; +import javax.inject.Inject; +import javax.inject.Singleton; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@ManagedBean +@Resource +@Singleton +public class GroupCreationService { + + @Inject + private ICommunication communicationService; + + @Inject + private Management management; + + public boolean createExampleProject() { + + User docentUser = getDocentUser(); + Project project = new Project("1", "", true, docentUser.getEmail(), "admin"); + + List<Group> groups = createDummyGroups(project.getId()); + + if (!management.exists(project)) { + management.create(project); + } + + groups.forEach(group -> management.createGroup(group, project.getId())); + + // TODO: read List<Group> of database to get Id for chatRoomName (Should be ProjectName - GroupId) + // TODO: add projectName as DatabaseEntry + // TODO: implement sql service injection for, so connection is only done once in app + + + List<Group> nonEmptyGroups = groups.stream().filter(group -> group.getMembers().isEmpty()) + .collect(Collectors.toList()); + if (nonEmptyGroups.isEmpty()) { + return false; + } + + + return true; + } + + private List<Group> createDummyGroups(String projectId) { + Group group1 = new Group(new ArrayList<>(), projectId); + Group group2 = new Group(new ArrayList<>(), projectId); + Group group3 = new Group(new ArrayList<>(), projectId); + Group group4 = new Group(new ArrayList<>(), projectId); + List<Group> groups = Arrays.asList(group1, group2, group3, group4); + + String baseUserName = "Name "; + String password = "test123"; + String baseEMailFront = "test"; + String baseEMailDomain = "@example.com"; + boolean isStudentValue = true; + for (int userNumber = 0; userNumber < groups.size() * 5; userNumber++) { + String userName = baseUserName + (userNumber + 1); + String email = baseEMailFront + (userNumber + 1) + baseEMailDomain; + User user = new User(userName, password, email, isStudentValue); + if (!management.exists(user)) { + saveUserToDatabase(user); + int groupPosition = userNumber % groups.size(); + groups.get(groupPosition).addMember(user); + } + } + return groups; + } + + private User getDocentUser() { + User docent = new User("Julian", "docent", "docent@docent.com", false); + if (!management.exists(docent)) { + saveUserToDatabase(docent); + } else { + docent = management.getUserByEmail(docent.getEmail()); + } + return docent; + } + + private void saveUserToDatabase(User user) { + communicationService.registerAndLoginUser(user); + management.create(user, new UserProfile()); + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/munchkin/service/RestyMunschkin.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/munchkin/service/RestyMunschkin.java index b4ab145efa2e345797c8c918846a5f483b427f17..256554946e5218afacaedc914e21fe9c1f70ca01 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/munchkin/service/RestyMunschkin.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/munchkin/service/RestyMunschkin.java @@ -38,5 +38,23 @@ public class RestyMunschkin { return munschkin; } + @GET + @Produces(MediaType.TEXT_HTML) + @Path("/project/{projectId}/quiz/{quizId}") + public String exampleQuiz(@PathParam("projectId") String name, @PathParam("quizId") String quiz) { + /**String[] correctAnswers = new String[2]; + correctAnswers[0] = "42"; + correctAnswers[1] = "24"; + String[] wrongAnswers = {"a god created creature", "a sum of my mistakes"}; + if (false){ + return "ProjectId not found: " + name; + } + Quiz sampleQuiz = new Quiz("multiple","Who am I and if so, how many?", correctAnswers,wrongAnswers); + log.info("HelloWorldview helloWorld Method answered: "+ sampleQuiz.toString()); + return sampleQuiz.toString();*/ + return "<html> " + "<title>" + "Hello Munschkin" + "</title>" + "<body><h1>" + "</body></h1>" + "</html> "; + + } + } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/ExampleFeedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/ExampleFeedback.java new file mode 100644 index 0000000000000000000000000000000000000000..bc040fad7ccfad8993d3a1f33ca2eebfbefb48a3 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/ExampleFeedback.java @@ -0,0 +1,31 @@ +package unipotsdam.gf.modules.peer2peerfeedback; + +import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.core.management.utils.Category; + +import java.io.File; + +/** + Peer2PeerFeedback example + created by Katharina + */ + +public class ExampleFeedback { + + String feedbacktopic = "Vorschlag zur Methodik"; + String feedbacktype = "Text"; + Category feedbackcategory = Category.METHODIK; + User feedbackrec = new User(); + User feedbacksend = new User(); + File file = new File("src/main/resources/example.txt"); //gibt erstmal nur einen Pfad an + //String path = file.getAbsolutePath(); + + + public Peer2PeerFeedback examplePeerFeedback (){ + + Peer2PeerFeedback example = new Peer2PeerFeedback(feedbacktopic, feedbacktype, + feedbackcategory, file, feedbacksend, feedbackrec); + + return example; + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Peer2PeerFeedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Peer2PeerFeedback.java index 4633872e460122c4f879d78f749bae820ed36587..d68e106fb4c8d007e1d5b1a5a8c5e7eef4289487 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Peer2PeerFeedback.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Peer2PeerFeedback.java @@ -1,30 +1,30 @@ package unipotsdam.gf.modules.peer2peerfeedback; import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.core.management.utils.Category; import java.io.File; /** Peer2PeerFeedback Object + created by Katharina */ public class Peer2PeerFeedback{ - String feedbacktopic; - String feedbacktype; - String feedbackreference; - File document; - String feedbacktemplate; - User feedbacksender; - User feedbackreceiver; + private String feedbacktopic; + private String feedbacktype; + private Category feedbackcategory; + private File document; + private User feedbacksender; + private User feedbackreceiver; - public Peer2PeerFeedback(String feedbacktopic, String feedbacktype, String feedbackreference, File document, String feedbacktemplate, User feedbacksender, User feedbackreceiver) { + public Peer2PeerFeedback(String feedbacktopic, String feedbacktype, Category feedbackcategory, File document, User feedbacksender, User feedbackreceiver) { this.feedbacktopic = feedbacktopic; this.feedbacktype = feedbacktype; - this.feedbackreference = feedbackreference; + this.feedbackcategory = feedbackcategory; this.document = document; - this.feedbacktemplate = feedbacktemplate; this.feedbacksender = feedbacksender; this.feedbackreceiver = feedbackreceiver; } @@ -51,14 +51,13 @@ public class Peer2PeerFeedback{ } - public String getFeedbackreference() { - return feedbackreference; + public Category getFeedbackcategory() { + return feedbackcategory; } - public void setFeedbackreference(String feedbackreference) { - - this.feedbackreference = feedbackreference; + public void setFeedbackcategory(Category feedbackcategory) { + this.feedbackcategory = feedbackcategory; } @@ -72,16 +71,6 @@ public class Peer2PeerFeedback{ this.document = document; } - public String getFeedbacktemplate() { - - return feedbacktemplate; - } - - public void setFeedbacktemplate(String feedbacktemplate) { - - this.feedbacktemplate = feedbacktemplate; - } - public User getFeedbacksender() { return feedbacksender; @@ -105,8 +94,7 @@ public class Peer2PeerFeedback{ return "Peer2PeerFeedback{" + "feedbacktopic=" + feedbacktopic + ", feedbacktype=" + feedbacktype + - ", feedbackreference=" + feedbackreference + - ", feedbacktemplate=" + feedbacktemplate + + ", feedbackreference=" + feedbackcategory + ", feedbacksender='" + feedbacksender + ", feedbackreceiver=" + feedbackreceiver + ", document=" + document.toString() + diff --git a/gemeinsamforschen/src/main/webapp/WEB-INF/web.xml b/gemeinsamforschen/src/main/webapp/WEB-INF/web.xml index be128ff4fe1eb5321a87cbfe63fb7baa02fe40a8..929b4ad51850624802f6c16eed5d88b77f59b274 100644 --- a/gemeinsamforschen/src/main/webapp/WEB-INF/web.xml +++ b/gemeinsamforschen/src/main/webapp/WEB-INF/web.xml @@ -26,6 +26,10 @@ <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param> + <init-param> + <param-name>javax.ws.rs.Application</param-name> + <param-value>unipotsdam.gf.config.GFResourceConfig</param-value> + </init-param> <!-- <init-param> <param-name>com.sun.jersey.config.feature.DisableWADL</param-name> <param-value>true</param-value> @@ -88,7 +92,7 @@ <welcome-file-list> - <welcome-file>index.html</welcome-file> + <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> diff --git a/gemeinsamforschen/src/main/webapp/assets/css/Community-ChatComments.css b/gemeinsamforschen/src/main/webapp/assets/css/Community-ChatComments.css new file mode 100644 index 0000000000000000000000000000000000000000..fd35cb7c8666702b9c4410f85ef329fa8a8b3b0a --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/css/Community-ChatComments.css @@ -0,0 +1,13 @@ +img { + border-radius:5px; +} + +img { + border-radius:5px; +} + +.btn { + margin:0px 10px; + margin-bottom:20px; +} + diff --git a/gemeinsamforschen/src/main/webapp/assets/css/Sidebar-Menu-1.css b/gemeinsamforschen/src/main/webapp/assets/css/Sidebar-Menu-1.css new file mode 100644 index 0000000000000000000000000000000000000000..66e203c407f8777f74f6fdbcca0b9ba43812e3b1 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/css/Sidebar-Menu-1.css @@ -0,0 +1,129 @@ +body { + overflow-x:hidden; +} + +#wrapper { + padding-left:0; + -webkit-transition:all 0.5s ease; + -moz-transition:all 0.5s ease; + -o-transition:all 0.5s ease; + transition:all 0.5s ease; +} + +#wrapper.toggled { + padding-left:250px; +} + +#sidebar-wrapper { + z-index:1000; + position:fixed; + left:250px; + width:0; + height:100%; + margin-left:-250px; + overflow-y:auto; + background:#000; + -webkit-transition:all 0.5s ease; + -moz-transition:all 0.5s ease; + -o-transition:all 0.5s ease; + transition:all 0.5s ease; +} + +#wrapper.toggled #sidebar-wrapper { + width:250px; +} + +#page-content-wrapper { + width:100%; + position:absolute; + padding:15px; +} + +#wrapper.toggled #page-content-wrapper { + position:absolute; + margin-right:-250px; +} + +.sidebar-nav { + position:absolute; + top:0; + width:250px; + margin:0; + padding:0; + list-style:none; +} + +.sidebar-nav li { + text-indent:20px; + line-height:40px; +} + +.sidebar-nav li a { + display:block; + text-decoration:none; + color:#999999; +} + +.sidebar-nav li a:hover { + text-decoration:none; + color:#fff; + background:rgba(255,255,255,0.2); +} + +.sidebar-nav li a:active, .sidebar-nav li a:focus { + text-decoration:none; +} + +.sidebar-nav > .sidebar-brand { + height:65px; + font-size:18px; + line-height:60px; +} + +.sidebar-nav > .sidebar-brand a { + color:#999999; +} + +.sidebar-nav > .sidebar-brand a:hover { + color:#fff; + background:none; +} + +@media (min-width:768px) { + #wrapper { + padding-left:250px; + } +} + +@media (min-width:768px) { + #wrapper.toggled { + padding-left:0; + } +} + +@media (min-width:768px) { + #sidebar-wrapper { + width:250px; + } +} + +@media (min-width:768px) { + #wrapper.toggled #sidebar-wrapper { + width:0; + } +} + +@media (min-width:768px) { + #page-content-wrapper { + padding:20px; + position:relative; + } +} + +@media (min-width:768px) { + #wrapper.toggled #page-content-wrapper { + position:relative; + margin-right:0; + } +} + diff --git a/gemeinsamforschen/src/main/webapp/assets/css/styles.css b/gemeinsamforschen/src/main/webapp/assets/css/styles.css index 51a30b0dd9cb1987e7d8c71cd72bbba19a31f3a5..b4a3cba5eaa0697dd95ceb3a0436550950ed4f1c 100644 --- a/gemeinsamforschen/src/main/webapp/assets/css/styles.css +++ b/gemeinsamforschen/src/main/webapp/assets/css/styles.css @@ -95,7 +95,37 @@ opacity: 0; } } +#chat { + width:35%; + margin-right: 20px; +} + +table .tableTd{ + font-size: 27px; +} + +.questionTd{ + margin: auto; +} + +table .table-striped{ + margin-left:2%; + font-size:24px; + align-content: center; + width: 96%; +} + +table ul{ + justify-items: center; +} +table img{ + width:200px; +} + +.btn .btn-light{ + margin-top:6px; +} .checkbox { padding-left: 20px; } diff --git a/gemeinsamforschen/src/main/webapp/assets/js/Sidebar-Menu.js b/gemeinsamforschen/src/main/webapp/assets/js/Sidebar-Menu.js new file mode 100644 index 0000000000000000000000000000000000000000..75d87e9ab3437b44784b97cf2e600b636f8b4257 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/js/Sidebar-Menu.js @@ -0,0 +1,4 @@ +$("#menu-toggle").click(function(e) { + e.preventDefault(); + $("#wrapper").toggleClass("toggled"); +}); \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/assets/js/assessmentCalculator.js b/gemeinsamforschen/src/main/webapp/assets/js/assessmentCalculator.js new file mode 100644 index 0000000000000000000000000000000000000000..743de6b60c639819d73547e300b8d46bd6b3b564 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/js/assessmentCalculator.js @@ -0,0 +1,83 @@ +$(document).ready(function () { //todo: paths should be relative + $("#giveItBack").on("click", function () { + $.ajax({ + url: "../rest/assessments/total/project/" + "gemeinsamForschen" + "/student/" + "Bela", + type: 'GET', + success: function (data) { + alert("here is the TotalPerformance: " + data); + + location.href="../pages/project-student.jsp?token="+getUserTokenFromUrl(); + }, + error: function (a, b, c) { + alert('some error' + a); + } + }) + }); + $("#calculateNow").on("click", function () { + var dataP = [ + { + "studentIdentifier": { + "projectId": "projekt", + "studentId": "Keiler" + }, + "quizAnswer": [ + 1, + 0, + 1, + 1, + 1, + 0 + ], + "feedback": "toller dude", + "workRating": [ + 5, + 4, + 3, + 2, + 1, + 0 + ] + }, + { + "studentIdentifier": { + "projectId": "projekt", + "studentId": "Glucke" + }, + "quizAnswer": [ + 1, + 1, + 1, + 1, + 1, + 0 + ], + "feedback": "super", + "workRating": [ + 1, + 1, + 1, + 2, + 3, + 2 + ] + } + ]; + + $.ajax({ + url: "../rest/assessments/calculate", + type: 'POST', + headers: { + "Content-Type": "application/json", + "Cache-Control": "no-cache" + }, + data: JSON.stringify(dataP), + success: function (response) { + alert(response[0].studentIdentifier.studentId + " got " +response[0].grade*100+"% /n"+ + response[1].studentIdentifier.studentId + " got " +response[1].grade*100+"% /n"); + }, + error: function (a) { + alert('some error' + a); + } + }) + }) +}); \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js b/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js new file mode 100644 index 0000000000000000000000000000000000000000..a42d6489e0ef6234a63275d85c978a6d2155c399 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js @@ -0,0 +1,37 @@ +$(document).ready(function() { + $(".carousel").carousel({ + interval: false + }); + $('#assessThePeer').on("click", function () { + assessPeer(); + }); +}); +function assessPeer(){ + var peerRating = { + "fromPeer": getUser(), + "toPeer": "", + "workRating": [] + }; + var dataP = []; + var peerStudents =$('.peerStudent'); + for (var i=0; i< peerStudents.length; i++){ + peerRating.toPeer = peerStudents[i].id; + peerRating.workRating = [5,4,3,2] + } + dataP.push(peerRating); + $.ajax({ + url:'../rest/assessments/peer/project/1/group/1', + type: 'POST', + headers: { + "Content-Type": "application/json", + "Cache-Control": "no-cache" + }, + data: JSON.stringify(dataP), + success: function(){ + + }, + error: function(a,b,c){ + + } + }); +} diff --git a/gemeinsamforschen/src/main/webapp/assets/js/overview-docent.js b/gemeinsamforschen/src/main/webapp/assets/js/overview-docent.js new file mode 100644 index 0000000000000000000000000000000000000000..a0daa5f08339ef2927fc55c39598bbca1e55648a --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/js/overview-docent.js @@ -0,0 +1,5 @@ +$(document).ready(function(){ + $('#project1Link').on('click', function(){ + location.href="project-docent.jsp?token="+getUserTokenFromUrl(); + }); +}); \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/assets/js/overview-student.js b/gemeinsamforschen/src/main/webapp/assets/js/overview-student.js new file mode 100644 index 0000000000000000000000000000000000000000..58a1b769651bb338348cdd908d25faa7b9c4037e --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/js/overview-student.js @@ -0,0 +1,5 @@ +$(document).ready(function(){ + $('#project1Link').on('click', function(){ + location.href="project-student.jsp?token="+getUserTokenFromUrl(); + }); +}); \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js b/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js new file mode 100644 index 0000000000000000000000000000000000000000..68179aa9e1fa56b698992bc3212e2bd41b2d4a94 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js @@ -0,0 +1,73 @@ +$(document).ready(function () { + var loading = $('#loadbar').hide(); + $(document) + .ajaxStart(function () { + loading.show(); + }).ajaxStop(function () { + loading.hide(); + }); + + $("label.btn").on('click',function () { + var choice = $(this).find('input:radio').val(); + $('#loadbar').show(); + $('#quiz').fadeOut(); + setTimeout(function(){ + $( "#answer" ).html( $(this).checking(choice) ); + $('#quiz').show(); + $('#loadbar').fadeOut(); + /* something else */ + }, 1500); + }); + + $ans = 3; + + $.fn.checking = function(ck) { + if (ck != $ans) + return 'INCORRECT'; + else + return 'CORRECT'; + }; + + $.ajax({ + url: '../rest/assessments/project/1/quiz/', + type: 'GET', + success: function (data) { + var table = document.getElementById('tableQuiz'); + for (var quiz = 0; quiz < data.length; quiz++){ + var answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers); + var colspan = answers.length; + var trQuestion = document.createElement('TR'); + var question = '<td colspan="' + colspan + '">' + data[quiz].question + '</td>'; + trQuestion.innerHTML = question; + var trAnswers = document.createElement('TR'); + answers = shuffle(answers); + var answersTd='<div class="quiz" id="quiz" data-toggle="buttons"><td style="display: block;">'; + for (var i = 0; i < answers.length; i++) { + answersTd = answersTd + '<div><label class="element-animation1 btn btn-lg btn-primary btn-block"><span class="btn-label"><i class="glyphicon glyphicon-chevron-right"></i></span><input type="checkbox">' + answers[i] + '</label></div>'; + } + question =""; + answers=[]; + trAnswers.innerHTML = answersTd+'</div></td>'; + table.appendChild(trQuestion); + table.appendChild(trAnswers); + } + }, + error: function (a, b, c) { + alert('Fehler ' + a); + } + }); + $("#submitQuiz").on("click", function () { + + }); +}); + +function shuffle(a) { + var j, x, i; + for (i = a.length - 1; i > 0; i--) { + j = Math.floor(Math.random() * (i + 1)); + x = a[i]; + a[i] = a[j]; + a[j] = x; + } + return a; +} \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/communication/chatWindow.tld b/gemeinsamforschen/src/main/webapp/communication/chatWindow.tld new file mode 100644 index 0000000000000000000000000000000000000000..e98a7ae49e0b8eba380ac79f2efd35b0840c63cc --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/communication/chatWindow.tld @@ -0,0 +1,16 @@ +<taglib> + <tlib-version>1.0</tlib-version> + <jsp-version>2.0</jsp-version> + <short-name>chatWindow</short-name> + + <tag> + <name>chatWindow</name> + <tag-class>unipotsdam.gf.modules.communication.ChatWindow</tag-class> + <body-content>empty</body-content> + <attribute> + <name>orientation</name> + <required>yes</required> + <rtexprvalue>no</rtexprvalue> + </attribute> + </tag> +</taglib> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/core/pages/hiddenUserField.tld b/gemeinsamforschen/src/main/webapp/core/pages/gemeinsamForschen.tld similarity index 65% rename from gemeinsamforschen/src/main/webapp/core/pages/hiddenUserField.tld rename to gemeinsamforschen/src/main/webapp/core/pages/gemeinsamForschen.tld index bb1ceeb141850ffc882c0521893f52d6d94f181b..3704c718e3338de67f5165d78f3d5785f983b11a 100644 --- a/gemeinsamforschen/src/main/webapp/core/pages/hiddenUserField.tld +++ b/gemeinsamforschen/src/main/webapp/core/pages/gemeinsamForschen.tld @@ -8,4 +8,11 @@ <tag-class>unipotsdam.gf.core.management.user.HiddenUserTag</tag-class> <body-content>empty</body-content> </tag> + + <tag> + <name>menu</name> + <tag-class>unipotsdam.gf.core.management.user.Menu</tag-class> + <body-content>empty</body-content> + </tag> + </taglib> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/assessmentCalculator.jsp b/gemeinsamforschen/src/main/webapp/pages/assessmentCalculator.jsp new file mode 100644 index 0000000000000000000000000000000000000000..ded714cfe627d8250322e7a0e1e1bc4b915cc5a1 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/pages/assessmentCalculator.jsp @@ -0,0 +1,17 @@ +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%> + +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title>assessment calculator</title> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> + <script src="../assets/js/assessmentCalculator.js"></script> + <script src="../assets/js/utility.js"></script> +</head> +<body> +<button id="calculateNow">Post Performance</button> +<button id="giveItBack">Get TotalPerformance</button> +<menu:menu></menu:menu> +</body> +</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/createQuiz.jsp b/gemeinsamforschen/src/main/webapp/pages/createQuiz.jsp new file mode 100644 index 0000000000000000000000000000000000000000..b9741e2ee9962d42c06531d2052593db0a4a4f4a --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/pages/createQuiz.jsp @@ -0,0 +1,16 @@ +<%-- + Created by IntelliJ IDEA. + User: fides-WHK + Date: 21.06.2018 + Time: 12:37 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<html> +<head> + <title>gemeinsam Forschen</title> +</head> +<body> +<h1>hier werden quizzes vom Dozenten oder Studenten erstellt</h1> +</body> +</html> diff --git a/gemeinsamforschen/src/main/webapp/pages/finalAssessments.jsp b/gemeinsamforschen/src/main/webapp/pages/finalAssessments.jsp new file mode 100644 index 0000000000000000000000000000000000000000..52b127d16b895665f442b4c3d13b0e26017f7b07 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/pages/finalAssessments.jsp @@ -0,0 +1,365 @@ +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%> + +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>muster-gemeinsam-forschen</title> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> + <link rel="stylesheet" href="../assets/css/styles.css"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> + <script src="../assets/js/finalAssessment.js"></script> + <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css"> + <link rel="stylesheet" href="../assets/css/Community-ChatComments.css"> + <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css"> + <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css"> +</head> + +<body> +<div id="wrapper"> + <menu:menu></menu:menu> + <div class="page-content-wrapper"> + <div class="container-fluid"> + <h1 id="projectId">project1 + <a href="#"> + <span class="glyphicon glyphicon-envelope" + style="font-size:27px;margin-top:-17px;margin-left:600px;"></span> + </a> + <a href="#"> + <span class="glyphicon glyphicon-cog" + style="font-size:29px;margin-left:5px;margin-top:-25px;"></span> + </a></h1> + </div> + <div> + <table> + <tr> + <td id="yourContent"> + <h1>Assessment for project1 </h1> + <!-- here will be all the content --> + <div class="container"> + <h2>Carousel Example</h2> + <div id="myCarousel" class="carousel slide" data-ride="carousel"> + <!-- Indicators --> + <ol class="carousel-indicators"> + <li data-target="#myCarousel" data-slide-to="0" class="active"></li> + <li data-target="#myCarousel" data-slide-to="1"></li> + <li data-target="#myCarousel" data-slide-to="2"></li> + </ol> + + <!-- Wrapper for slides --> + <div class="carousel-inner"> + <div class="item active"> + <table class="table-striped peerStudent" + style="width:70%;border:1px solid; margin:auto;" id="student1"> + <tr> + <td align="center"> + <img src="../assets/img/1.jpg" alt="student1" + style="width:20%;"> + </td> + </tr> + <tr> + <td align="center"> + <h3>Führungsqualität</h3> + </td> + </tr> + <tr> + <td align="center"> + <label>gut<input type="radio" value="5" + name="leadership1"></label> + <input type="radio" value="4" name="leadership1"> + <input type="radio" value="3" name="leadership1"> + <input type="radio" value="2" name="leadership1"> + <label><input type="radio" value="1" name="leadership1"> + ungenügend</label> + </td> + </tr> + <tr> + <td align="center"> + <h3>Kooperationsbereitschaft</h3> + </td> + </tr> + <tr> + <td align="center"> + <label><input type="radio" value="5" name="cooparation1"> + gut</label> + <input type="radio" value="4" name="cooparation1"> + <input type="radio" value="3" name="cooparation1"> + <input type="radio" value="2" name="cooparation1"> + <label><input type="radio" value="1" name="cooparation1"> + ungenügend</label> + </td> + </tr> + <tr> + <td align="center"> + <h3>Pünktlichkeit</h3> + </td> + </tr> + <tr> + <td align="center"> + <label><input type="radio" value="5" name="punctual1"> + gut</label> + <input type="radio" value="4" name="punctual1"> + <input type="radio" value="3" name="punctual1"> + <input type="radio" value="2" name="punctual1"> + <label><input type="radio" value="1" name="punctual1"> + ungenügend</label> + </td> + </tr> + <tr> + <td align="center"> + <h3>Selbstständigkeit</h3> + </td> + </tr> + <tr> + <td align="center"> + <label><input type="radio" value="5" name="autonomous1"> + gut</label> + <input type="radio" value="4" name="autonomous1"> + <input type="radio" value="3" name="autonomous1"> + <input type="radio" value="2" name="autonomous1"> + <label><input type="radio" value="1" name="autonomous1"> + ungenügend</label> + </td> + </tr> + </table> + </div> + + <div class="item"> + <table class="table-striped peerStudent" + style="width:70%;border:1px solid; margin:auto;" id="student2"> + <tr> + <td align="center"> + <img src="../assets/img/2.jpg" alt="student2" + style="width:20%;"> + </td> + </tr> + <tr> + <td align="center"> + <h3>Führungsqualität</h3> + </td> + </tr> + <tr> + <td align="center"> + <label>gut<input type="radio" value="5" + name="leadership2"></label> + <input type="radio" value="4" name="leadership2"> + <input type="radio" value="3" name="leadership2"> + <input type="radio" value="2" name="leadership2"> + <label><input type="radio" value="1" name="leadership2"> + ungenügend</label> + </td> + </tr> + <tr> + <td align="center"> + <h3>Kooperationsbereitschaft</h3> + </td> + </tr> + <tr> + <td align="center"> + <label><input type="radio" value="5" name="cooparation2"> + gut</label> + <input type="radio" value="4" name="cooparation2"> + <input type="radio" value="3" name="cooparation2"> + <input type="radio" value="2" name="cooparation2"> + <label><input type="radio" value="1" name="cooparation2"> + ungenügend</label> + </td> + </tr> + <tr> + <td align="center"> + <h3>Pünktlichkeit</h3> + </td> + </tr> + <tr> + <td align="center"> + <label><input type="radio" value="5" name="punctual2"> + gut</label> + <input type="radio" value="4" name="punctual2"> + <input type="radio" value="3" name="punctual2"> + <input type="radio" value="2" name="punctual2"> + <label><input type="radio" value="1" name="punctual2"> + ungenügend</label> + </td> + </tr> + <tr> + <td align="center"> + <h3>Selbstständigkeit</h3> + </td> + </tr> + <tr> + <td align="center"> + <label><input type="radio" value="5" name="autonomous2"> + gut</label> + <input type="radio" value="4" name="autonomous2"> + <input type="radio" value="3" name="autonomous2"> + <input type="radio" value="2" name="autonomous2"> + <label><input type="radio" value="1" name="autonomous2"> + ungenügend</label> + </td> + </tr> + </table> + </div> + + <div class="item"> + <table class="table-striped peerStudent" + style="width:70%;border:1px solid; margin:auto;" id="student3"> + <tr> + <td align="center"> + <img src="../assets/img/3.jpg" alt="student3" + style="width:20%;"> + </td> + </tr> + <tr> + <td align="center"> + <h3>Führungsqualität</h3> + </td> + </tr> + <tr> + <td align="center"> + <label>gut<input type="radio" value="5" + name="leadership3"></label> + <input type="radio" value="4" name="leadership3"> + <input type="radio" value="3" name="leadership3"> + <input type="radio" value="2" name="leadership3"> + <label><input type="radio" value="1" name="leadership3"> + ungenügend</label> + </td> + </tr> + <tr> + <td align="center"> + <h3>Kooperationsbereitschaft</h3> + </td> + </tr> + <tr> + <td align="center"> + <label><input type="radio" value="5" name="cooparation3"> + gut</label> + <input type="radio" value="4" name="cooparation3"> + <input type="radio" value="3" name="cooparation3"> + <input type="radio" value="2" name="cooparation3"> + <label><input type="radio" value="1" name="cooparation3"> + ungenügend</label> + </td> + </tr> + <tr> + <td align="center"> + <h3>Pünktlichkeit</h3> + </td> + </tr> + <tr> + <td align="center"> + <label><input type="radio" value="5" name="punctual3"> + gut</label> + <input type="radio" value="4" name="punctual3"> + <input type="radio" value="3" name="punctual3"> + <input type="radio" value="2" name="punctual3"> + <label><input type="radio" value="1" name="punctual3"> + ungenügend</label> + </td> + </tr> + <tr> + <td align="center"> + <h3>Selbstständigkeit</h3> + </td> + </tr> + <tr> + <td align="center"> + <label><input type="radio" value="5" name="autonomous3"> + gut</label> + <input type="radio" value="4" name="autonomous3"> + <input type="radio" value="3" name="autonomous3"> + <input type="radio" value="2" name="autonomous3"> + <label><input type="radio" value="1" name="autonomous3"> + ungenügend</label> + </td> + </tr> + </table> + </div> + </div> + + <!-- Left and right controls --> + <a class="left carousel-control" href="#myCarousel" data-slide="prev"> + <span class="glyphicon glyphicon-chevron-left"></span> + <span class="sr-only">Previous</span> + </a> + <a class="right carousel-control" href="#myCarousel" data-slide="next"> + <span class="glyphicon glyphicon-chevron-right"></span> + <span class="sr-only">Next</span> + </a> + </div> + <button class="btn btn-success" id="assessThePeer">Gruppe bewerten</button> + </div> + </td> + <td id="chat"> + <div class="card"> + <div class="card-header"> + <h6 class="mb-0">Gruppen+Projekt Chat</h6> + </div> + <div class="card-body"> + <ul class="list-group"> + <li class="list-group-item"> + <div class="media"> + <div></div> + <div class="media-body"> + <div class="media" style="overflow:visible;"> + <div><img src="../assets/img/1.jpg" class="mr-3" + style="width: 25px; height:25px;"></div> + <div class="media-body" style="overflow:visible;"> + <div class="row"> + <div class="col-md-12"> + <p><a href="#">Sara Doe:</a> This guy has been going + 100+ MPH on side streets. <br> + <small class="text-muted">August 6, 2016 @ 10:35am + </small> + </p> + </div> + </div> + </div> + </div> + </div> + </div> + </li> + <li class="list-group-item"> + <div class="media"> + <div></div> + <div class="media-body"> + <div class="media" style="overflow:visible;"> + <div><img src="../assets/img/2.jpg" class="mr-3" + style="width: 25px; height:25px;"></div> + <div class="media-body" style="overflow:visible;"> + <div class="row"> + <div class="col-md-12"> + <p><a href="#">Brennan Prill:</a> This guy has been + going 100+ MPH on side streets. <br> + <small class="text-muted">August 6, 2016 @ 10:35am + </small> + </p> + </div> + </div> + </div> + </div> + </div> + </div> + </li> + </ul> + <button class="btn btn-light"> + Add Comment + </button> + </div> + </div> + </td> + </tr> + </table> + </div> + </div> +</div> + +<script src="../assets/js/jquery.min.js"></script> +<script src="../assets/bootstrap/js/bootstrap.min.js"></script> +<script src="../assets/js/Sidebar-Menu.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-docent.html b/gemeinsamforschen/src/main/webapp/pages/overview-docent.html index 09976e3dbdfee1f438573c5f7e6726c396f77d07..cc9f504b65cee81c9b30aefdae2a72555178b49f 100644 --- a/gemeinsamforschen/src/main/webapp/pages/overview-docent.html +++ b/gemeinsamforschen/src/main/webapp/pages/overview-docent.html @@ -20,7 +20,7 @@ <table id="projects"> <!-- getElementById('projects').append um neue Projekte anzufügen --> <tr style="cursor:pointer" role="button"> <td> - <a href="project-docent.html"> + <a id="project1Link"> <h1>dummy Projekt1</h1> </a> </td> @@ -51,7 +51,7 @@ </tr> <tr style="cursor:pointer" role="button"> <td> - <a href="project-docent.html"> + <a href="project-docent.jsp"> <h1>dummy Projekt2</h1> </a> </td> diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-docent.html.orig b/gemeinsamforschen/src/main/webapp/pages/overview-docent.html.orig new file mode 100644 index 0000000000000000000000000000000000000000..621176b5de895049ff300d1782269135a296493e --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/pages/overview-docent.html.orig @@ -0,0 +1,91 @@ +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>fltrail</title> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> + <link rel="stylesheet" href="../assets/css/styles.css"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> +</head> + +<body> +<h1>Übersicht für Dozent1</h1> +<a href="#"><span class="glyphicon glyphicon-envelope" + style="font-size:27px;margin-top:-17px;margin-left:600px;"></span></a> +<a href="#"><span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span></a> +<div> + <table id="projects"> <!-- getElementById('projects').append um neue Projekte anzufügen --> + <tr style="cursor:pointer" role="button"> + <td> +<<<<<<< HEAD + <a id="project1Link"> +======= + <a href="project-docent.jsp"> +>>>>>>> 9bbae0ff75b2597ab35479a24d47c12e7a4cc0fd + <h1>dummy Projekt1</h1> + </a> + </td> + </tr> + <tr> + <td> + <div style="width:100px;"></div> + <div style="width:741px;"> + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Newsfeed </h3> + </div> + <div class="panel-body"> + <ul class="list-group"> + <li class="list-group-item"> + <span>erste Abgabe vom Dozenten zu dd.mm.yyyy gefordert</span> + </li> + <li class="list-group-item"><span>Beitrag von Student1 wurde hochgeladen</span></li> + <li class="list-group-item"><span>Gruppe "gemeinsam forschen" rockt das Haus</span></li> + </ul> + </div> + </div> + </div> + </td> + </tr> + <tr> + <td></td> + </tr> + <tr style="cursor:pointer" role="button"> + <td> + <a href="project-docent.jsp"> + <h1>dummy Projekt2</h1> + </a> + </td> + </tr> + <tr> + <td> + <div style="width:100px;"></div> + <div style="width:741px;"> + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Newsfeed </h3> + </div> + <div class="panel-body"> + <ul class="list-group"> + <li class="list-group-item"> + <span>erste Abgabe vom Dozenten zu dd.mm.yyyy gefordert</span> + </li> + <li class="list-group-item"><span>Beitrag von Student1 wurde hochgeladen</span></li> + <li class="list-group-item"><span>Gruppe "gemeinsam forschen" rockt das Haus</span></li> + </ul> + </div> + </div> + </div> + </td> + </tr> + </table> +</div> +<button class="btn btn-default" type="button" style="margin-left:250px;">Projekt erstellen</button> +<script src="../assets/js/jquery.min.js"></script> +<script src="../assets/bootstrap/js/bootstrap.min.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-student.html b/gemeinsamforschen/src/main/webapp/pages/overview-student.html index 5c56a57281374b88dea806cf08e86a14e2e65cfd..feb1ce71f4f1eefaae7b6ec8bd35341670fafa1c 100644 --- a/gemeinsamforschen/src/main/webapp/pages/overview-student.html +++ b/gemeinsamforschen/src/main/webapp/pages/overview-student.html @@ -9,6 +9,9 @@ <link rel="stylesheet" href="../assets/css/styles.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> + <script src="../assets/js/utility.js"></script> + <script src="../assets/js/overview-student.js"></script> + </head> <body> @@ -20,7 +23,7 @@ <table id="projects"> <!-- getElementById('projects').append um neue Projekte anzufügen --> <tr style="cursor:pointer" role="button"> <td> - <a href="project-docent.html"> + <a id="project1Link"> <h1>dummy Projekt1</h1> </a> </td> @@ -51,7 +54,7 @@ </tr> <tr style="cursor:pointer" role="button"> <td> - <a href="project-docent.html"> + <a href="project-docent.jsp"> <h1>dummy Projekt2</h1> </a> </td> diff --git a/gemeinsamforschen/src/main/webapp/pages/overview-student.html.orig b/gemeinsamforschen/src/main/webapp/pages/overview-student.html.orig new file mode 100644 index 0000000000000000000000000000000000000000..db7445c800029d1c311a2a61f6528428a110ae85 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/pages/overview-student.html.orig @@ -0,0 +1,94 @@ +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>fltrail</title> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> + <link rel="stylesheet" href="../assets/css/styles.css"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> + <script src="../assets/js/utility.js"></script> + <script src="../assets/js/overview-student.js"></script> + +</head> + +<body> +<h1>Übersicht für Student1</h1> +<a href="#"><span class="glyphicon glyphicon-envelope" + style="font-size:27px;margin-top:-17px;margin-left:600px;"></span></a> +<a href="#"><span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span></a> +<div> + <table id="projects"> <!-- getElementById('projects').append um neue Projekte anzufügen --> + <tr style="cursor:pointer" role="button"> + <td> +<<<<<<< HEAD + <a id="project1Link"> +======= + <a href="project-docent.jsp"> +>>>>>>> 9bbae0ff75b2597ab35479a24d47c12e7a4cc0fd + <h1>dummy Projekt1</h1> + </a> + </td> + </tr> + <tr> + <td> + <div style="width:100px;"></div> + <div style="width:741px;"> + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Newsfeed </h3> + </div> + <div class="panel-body"> + <ul class="list-group"> + <li class="list-group-item"> + <span>erste Abgabe vom Dozenten zu dd.mm.yyyy gefordert</span> + </li> + <li class="list-group-item"><span>Beitrag von Student1 wurde hochgeladen</span></li> + <li class="list-group-item"><span>Gruppe "gemeinsam forschen" rockt das Haus</span></li> + </ul> + </div> + </div> + </div> + </td> + </tr> + <tr> + <td></td> + </tr> + <tr style="cursor:pointer" role="button"> + <td> + <a href="project-docent.jsp"> + <h1>dummy Projekt2</h1> + </a> + </td> + </tr> + <tr> + <td> + <div style="width:100px;"></div> + <div style="width:741px;"> + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">Newsfeed </h3> + </div> + <div class="panel-body"> + <ul class="list-group"> + <li class="list-group-item"> + <span>erste Abgabe vom Dozenten zu dd.mm.yyyy gefordert</span> + </li> + <li class="list-group-item"><span>Beitrag von Student1 wurde hochgeladen</span></li> + <li class="list-group-item"><span>Gruppe "gemeinsam forschen" rockt das Haus</span></li> + </ul> + </div> + </div> + </div> + </td> + </tr> + </table> +</div> + </div><button class="btn btn-default" type="button" style="margin-left:250px;">Projekt beitreten</button> + <script src="../assets/js/jquery.min.js"></script> + <script src="../assets/bootstrap/js/bootstrap.min.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/project-docent.html b/gemeinsamforschen/src/main/webapp/pages/project-docent.html deleted file mode 100644 index 232c9e7711e845bf35552c8571a59c497c7d12da..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/webapp/pages/project-docent.html +++ /dev/null @@ -1,80 +0,0 @@ -<!DOCTYPE html> -<html> - -<head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>project-student (copy)</title> - <link rel="stylesheet" href="../assets/bootstrap/css/bootstrap.min.css"> - <link rel="stylesheet" href="../assets/css/styles.css"> -</head> - -<body> - <h1>dummy Projekt1 für Dozent1</h1><button class="btn btn-default" type="button">Gruppen erstellen</button><button class="btn btn-default" type="button">Projekt-chat öffnen</button><button class="btn btn-default" type="button">Projekt finalisieren</button> - <button - class="btn btn-default" type="button">Exportiere Projektergebnisse</button><button class="btn btn-default" type="button">Exportiere Zwischenstand</button><button class="btn btn-default" type="button">Quizfrage erstellen</button> - <div class="table-responsive"> - <table class="table"> - <thead> - <tr> - <th>Gruppe1 </th> - <th>Beiträge </th> - </tr> - </thead> - <tbody> - <tr> - <td>student1 </td> - <td>Interfaces </td> - </tr> - <tr> - <td>student2 </td> - <td>Design </td> - </tr> - </tbody> - </table> - </div> - <div class="table-responsive"> - <table class="table"> - <thead> - <tr> - <th>Gruppe2 </th> - <th>Beiträge </th> - </tr> - </thead> - <tbody> - <tr> - <td>student3 </td> - <td>Interfaces </td> - </tr> - <tr> - <td>student4 </td> - <td>Design </td> - </tr> - </tbody> - </table> - </div> - <div class="table-responsive"> - <table class="table"> - <thead> - <tr> - <th>Gruppe3 </th> - <th>Beiträge </th> - </tr> - </thead> - <tbody> - <tr> - <td>student5 </td> - <td>Interfaces </td> - </tr> - <tr> - <td>student6 </td> - <td>Design </td> - </tr> - </tbody> - </table> - </div> - <script src="../assets/js/jquery.min.js"></script> - <script src="../assets/bootstrap/js/bootstrap.min.js"></script> -</body> - -</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp b/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp new file mode 100644 index 0000000000000000000000000000000000000000..a67e761165a9ddf5b5d6879c41d2896b9581a771 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/pages/project-docent.jsp @@ -0,0 +1,137 @@ +<!DOCTYPE html> +<%@ taglib prefix = "communication" uri = "/communication/chatWindow.tld"%> +<html> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>project-student (copy)</title> + <link rel="stylesheet" href="../assets/bootstrap/css/bootstrap.min.css"> + <link rel="stylesheet" href="../assets/css/Community-ChatComments.css"> + <link rel="stylesheet" href="../assets/css/styles.css"> +</head> + +<body> + <h1>dummy Projekt1 für Dozent1</h1><button class="btn btn-default" type="button">Gruppen erstellen</button><button class="btn btn-default" type="button">Projekt finalisieren</button><button class="btn btn-default" type="button">Exportiere Projektergebnisse</button> + <button + class="btn btn-default" type="button">Exportiere Zwischenstand</button><button class="btn btn-default" type="button">Quizfrage erstellen</button> + <div> + <div class="container"> + <div class="row"> + <div class="col-md-6"> + <div class="table-responsive" style="width:294px;"> + <table class="table"> + <thead> + <tr> + <th>Gruppe1 </th> + <th>Beiträge </th> + </tr> + </thead> + <tbody> + <tr> + <td>student1 </td> + <td>Interfaces </td> + </tr> + <tr> + <td>student2 </td> + <td>Design </td> + </tr> + </tbody> + </table> + </div> + <div class="table-responsive" style="width:294px;"> + <table class="table"> + <thead> + <tr> + <th>Gruppe2 </th> + <th>Beiträge </th> + </tr> + </thead> + <tbody> + <tr> + <td>student3 </td> + <td>Interfaces </td> + </tr> + <tr> + <td>student4 </td> + <td>Design </td> + </tr> + </tbody> + </table> + </div> + <div class="table-responsive" style="width:294px;"> + <table class="table"> + <thead> + <tr> + <th>Gruppe3 </th> + <th>Beiträge </th> + </tr> + </thead> + <tbody> + <tr> + <td>student5 </td> + <td>Interfaces </td> + </tr> + <tr> + <td>student6 </td> + <td>Design </td> + </tr> + </tbody> + </table> + </div> + </div> + <div class="col-md-6"> + <div class="panel panel-default"> + <div class="panel-heading"> + <h3 class="panel-title">ProjektChat</h3> + </div> + <div class="panel-body" style="height:233px;"> + <ul class="list-group"> + <li class="list-group-item" style="margin-bottom:6px;"> + <div class="media"> + <div class="media-left"><a></a></div> + <div class="media-body"> + <div class="media" style="overflow:visible;"> + <div class="media-left"><a><img src="../assets/img/1.jpg" class="img-rounded" style="width: 25px; height:25px;"></a></div> + <div class="media-body" style="overflow:visible;"> + <div class="row"> + <div class="col-md-12"> + <p><a href="#">Sara Doe:</a> This guy has been going 100+ MPH on side streets. <br> +<small class="text-muted">August 6, 2016 @ 10:35am </small></p> + </div> + </div> + </div> + </div> + </div> + </div> + </li> + <li class="list-group-item" style="margin-bottom:6px;"> + <div class="media"> + <div class="media-left"><a></a></div> + <div class="media-body"> + <div class="media" style="overflow:visible;"> + <div class="media-left"><a><img src="../assets/img/1.jpg" class="img-rounded" style="width: 25px; height:25px;"></a></div> + <div class="media-body" style="overflow:visible;"> + <div class="row"> + <div class="col-md-12"> + <p><a href="#">Brennan Prill:</a> This guy has been going 100+ MPH on side streets. <br> +<small class="text-muted">August 6, 2016 @ 10:35am </small></p> + </div> + </div> + </div> + </div> + </div> + </div> + </li> + </ul><button class="btn btn-default" type="button" style="margin-left:601px;margin-top:-9px;">Add Comment</button></div> + </div> + </div> + </div> + </div> + </div> + <communication:chatWindow orientation="right"></communication:chatWindow> + <script src="../assets/js/jquery.min.js"></script> + <script src="../assets/bootstrap/js/bootstrap.min.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/project-student.html b/gemeinsamforschen/src/main/webapp/pages/project-student.html deleted file mode 100644 index ef556ac56bc5b6935c973a1b5c65307dd9688911..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/webapp/pages/project-student.html +++ /dev/null @@ -1,58 +0,0 @@ -<!DOCTYPE html> -<html> - -<head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>project-student</title> - <link rel="stylesheet" href="../assets/bootstrap/css/bootstrap.min.css"> - <link rel="stylesheet" href="../assets/css/styles.css"> - <link rel="stylesheet" href="/core/assets/css/Team-Boxed.css"> -</head> - -<body> - <h1>dummy Projekt1 für Student1</h1> - <div></div> - <div class="team-boxed" style="height:581px;"> - <div class="container"> - <div class="intro"> - <h2 class="text-center">deine Gruppe</h2> - </div> - <div class="row people"> - <div class="col-md-4 col-sm-6 item"> - <div class="box"><img class="img-circle" src="../core/assets/img/1.jpg"> - <h3 class="name">student1 </h3> - <p class="title"> </p> - <ul> - <li>Interfaces hochgeladen</li> - <li>Design erstellt</li> - </ul> - </div> - </div> - <div class="col-md-4 col-sm-6 item"> - <div class="box"><img class="img-circle" src="../core/assets/img/2.jpg"> - <h3 class="name">student2 </h3> - <p class="title"> </p> - <ul> - <li>Interfaces hochgeladen</li> - </ul> - </div> - </div> - <div class="col-md-4 col-sm-6 item"> - <div class="box"><img class="img-circle" src="../core/assets/img/3.jpg"> - <h3 class="name">student3 </h3> - </div> - <ul> - <li>Interace hochgeladen</li> - </ul> - </div> - </div> - </div> - </div><button class="btn btn-default" type="button">Projekt-chat starten</button><button class="btn btn-default" type="button">Quizfrage erstellen</button><button class="btn btn-default" type="button">Gruppen-chat starten</button><button class="btn btn-default" - type="button">ePortfolio </button><button class="btn btn-default" type="button">Beitrag hochladen</button><button class="btn btn-default" type="button">feedback </button><button class="btn btn-default" type="button" disabled="disabled">Bewertung </button> - <script - src="../assets/js/jquery.min.js"></script> - <script src="../assets/bootstrap/js/bootstrap.min.js"></script> -</body> - -</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/project-student.jsp b/gemeinsamforschen/src/main/webapp/pages/project-student.jsp new file mode 100644 index 0000000000000000000000000000000000000000..56d203004a59c56540948d5011d9f3089cd8908b --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/pages/project-student.jsp @@ -0,0 +1,147 @@ +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%> + +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>muster-gemeinsam-forschen</title> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> + <link rel="stylesheet" href="../assets/css/styles.css"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> + <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css"> + <link rel="stylesheet" href="../assets/css/Community-ChatComments.css"> + <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css"> + <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css"> +</head> + +<body> +<div id="wrapper"> + <menu:menu></menu:menu> + + <div class="page-content-wrapper"> + <div class="container-fluid"> + <h1 id="projectId">project1 + <a href="#"> + <span class="glyphicon glyphicon-envelope" + style="font-size:27px;margin-top:-17px;margin-left:600px;"></span> + </a> + <a href="#"> + <span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span> + </a></h1> + </div> + <div> + <table> + <tr> + <td id="yourContent"> + <h1>your content guys and girls!</h1> + <!-- here will be all the content --> + <table> + <tr> + <td> + <h3>student1</h3> + <img src="../assets/img/1.jpg"> + <a href="#">student1@uni.de</a> + <hr> + <ul> + <li>Projektübersicht hochgeladen</li> + <li>Blumen ins Hausaufgabenheft geklebt</li> + </ul> + </td> + <td> </td> + <td> + <h3>student2</h3> + <img src="../assets/img/2.jpg"> + <a href="#">student2@uni.de</a> + <hr> + <ul> + <li>feedback zu Herbarium im Hausaufgabenheft gegeben</li> + <li>Blumen an Vegetarier verfüttert</li> + <li>Die armen Vegetarier</li> + </ul> + </td> + <td> </td> + <td> + <h3>student3</h3> + <img src="../assets/img/3.jpg"> + <a href="#">student3@uni.de</a> + <hr> + <ul> + <li>Viva la Floristika</li> + </ul> + </td> + </tr> + </table> + </td> + <td id="chat"> + <div class="card"> + <div class="card-header"> + <h6 class="mb-0">Gruppen+Projekt Chat</h6> + </div> + <div class="card-body"> + <ul class="list-group"> + <li class="list-group-item"> + <div class="media"> + <div></div> + <div class="media-body"> + <div class="media" style="overflow:visible;"> + <div><img src="../assets/img/1.jpg" class="mr-3" + style="width: 25px; height:25px;"></div> + <div class="media-body" style="overflow:visible;"> + <div class="row"> + <div class="col-md-12"> + <p><a href="#">Sara Doe:</a> This guy has been going + 100+ MPH on side streets. <br> + <small class="text-muted">August 6, 2016 @ 10:35am + </small> + </p> + </div> + </div> + </div> + </div> + </div> + </div> + </li> + <li class="list-group-item"> + <div class="media"> + <div></div> + <div class="media-body"> + <div class="media" style="overflow:visible;"> + <div><img src="../assets/img/2.jpg" class="mr-3" + style="width: 25px; height:25px;"></div> + <div class="media-body" style="overflow:visible;"> + <div class="row"> + <div class="col-md-12"> + <p><a href="#">Brennan Prill:</a> This guy has been + going 100+ MPH on side streets. <br> + <small class="text-muted">August 6, 2016 @ 10:35am + </small> + </p> + </div> + </div> + </div> + </div> + </div> + </div> + </li> + </ul> + <button class="btn btn-light"> + Add Comment + </button> + </div> + </div> + </td> + </tr> + </table> + </div> + </div> +</div> + +<script src="../assets/js/jquery.min.js"></script> +<script src="../assets/bootstrap/js/bootstrap.min.js"></script> +<script src="../assets/js/Sidebar-Menu.js"></script> +</body> + +</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/takeQuiz.jsp b/gemeinsamforschen/src/main/webapp/pages/takeQuiz.jsp new file mode 100644 index 0000000000000000000000000000000000000000..cfda3512312ccec09bdd70ec66a5456405ed26b7 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/pages/takeQuiz.jsp @@ -0,0 +1,117 @@ +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%> +<!DOCTYPE html> +<html> + +<head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>muster-gemeinsam-forschen</title> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> + <link rel="stylesheet" href="../assets/css/styles.css"> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> + <script src="../assets/js/takeQuiz.js"></script> + <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css"> + <link rel="stylesheet" href="../assets/css/Community-ChatComments.css"> + <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css"> + <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css"> +</head> + +<body> + + +<div id="wrapper"> + <menu:menu></menu:menu> + <div class="page-content-wrapper"> + <div class="container-fluid"> + <h1 id="projectId">project1 + <a href="#"> + <span class="glyphicon glyphicon-envelope" + style="font-size:27px;margin-top:-17px;margin-left:600px;"></span> + </a> + <a href="#"> + <span class="glyphicon glyphicon-cog" style="font-size:29px;margin-left:5px;margin-top:-25px;"></span> + </a></h1> + </div> + <div> + <table> + <tr> + <td id="yourContent"> + <h1>Quiz for project1 </h1> + <!-- here will be all the content --> + + + + <table class="table-striped"> + <tbody id="tableQuiz"> + + </tbody> + </table> + <button id="submitQuiz" class="btn btn-success">Antwort speichern</button> + </td> + <td id="chat"> + <div class="card"> + <div class="card-header"> + <h6 class="mb-0">Gruppen+Projekt Chat</h6> + </div> + <div class="card-body"> + <ul class="list-group"> + <li class="list-group-item"> + <div class="media"> + <div></div> + <div class="media-body"> + <div class="media" style="overflow:visible;"> + <div><img src="../assets/img/1.jpg" class="mr-3" + style="width: 25px; height:25px;"></div> + <div class="media-body" style="overflow:visible;"> + <div class="row"> + <div class="col-md-12"> + <p><a href="#">Sara Doe:</a> This guy has been going + 100+ MPH on side streets. <br> + <small class="text-muted">August 6, 2016 @ 10:35am + </small> + </p> + </div> + </div> + </div> + </div> + </div> + </div> + </li> + <li class="list-group-item"> + <div class="media"> + <div></div> + <div class="media-body"> + <div class="media" style="overflow:visible;"> + <div><img src="../assets/img/2.jpg" class="mr-3" + style="width: 25px; height:25px;"></div> + <div class="media-body" style="overflow:visible;"> + <div class="row"> + <div class="col-md-12"> + <p><a href="#">Brennan Prill:</a> This guy has been + going 100+ MPH on side streets. <br> + <small class="text-muted">August 6, 2016 @ 10:35am + </small> + </p> + </div> + </div> + </div> + </div> + </div> + </div> + </li> + </ul> + <button class="btn btn-light"> + Add Comment + </button> + </div> + </div> + </td> + </tr> + </table> + </div> + </div> +</div> +</body> + +</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql index d7978655cfb76571a9bea19f726cacc6ca03364d..c92c03da44cc2448ac7b5e9d09cb274997e2459d 100644 --- a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql +++ b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql @@ -1,48 +1,67 @@ -SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; -SET time_zone = "+00:00"; +CREATE DATABASE IF NOT EXISTS `fltrail` + DEFAULT CHARACTER SET utf8 + COLLATE utf8_general_ci; +USE `fltrail`; -/*!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 utf8mb4 */; +CREATE TABLE if not exists `projects` ( + `id` varchar(400) NOT NULL, + `password` varchar(400) NOT NULL, + `active` tinyint(1) NOT NULL, + `timecreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP + ON UPDATE CURRENT_TIMESTAMP, + `author` varchar(400) NOT NULL, + `adminPassword` varchar(400) NOT NULL, + `token` varchar(400) NOT NULL +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; -CREATE DATABASE IF NOT EXISTS `fltrail` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; -USE `fltrail`; -CREATE TABLE `projects` ( - `id` varchar(400) NOT NULL, - `password` varchar(400) NOT NULL, - `activ` tinyint(1) NOT NULL, - `timecreated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - `author` varchar(400) NOT NULL, - `adminpassword` varchar(400) NOT NULL, - `token` varchar(400) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE `tags` ( +CREATE TABLE if not exists `groups` ( + `id` int NOT NULL AUTO_INCREMENT, + `projectId` varchar(400) NOT NULL, + `chatRoomId` varchar(400) NOT NULL, + PRIMARY KEY (id) +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; + +CREATE TABLE if not exists groupuser +( + userEmail varchar(400) NOT NULL, + groupId int NOT NULL +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; + +CREATE TABLE if not exists `tags` ( `projectId` varchar(400) NOT NULL, - `tag` varchar(400) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE `users` ( - `name` varchar(400) NOT NULL, - `password` varchar(200) NOT NULL, - `email` varchar(400) NOT NULL, - `token` varchar(800) NOT NULL -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - -CREATE TABLE projectuser - ( - projectId varchar(400) NOT NULL, - userId varchar(400) NOT NULL -); ENGINE=InnoDB DEFAULT CHARSET=utf8; + `tag` varchar(400) NOT NULL +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; -alter table users - add isStudent tinyint(1) default '1' null; +CREATE TABLE if not exists `users` ( + `name` varchar(400) NOT NULL, + `password` varchar(200) NOT NULL, + `email` varchar(255) NOT NULL, + `token` varchar(800) NOT NULL, + `rocketChatId` varchar(400) NOT NULL, + `rocketChatAuthToken` varchar(800) NOT NULL, + UNIQUE (email) +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; +CREATE TABLE if not exists projectuser +( + projectId varchar(400) NOT NULL, + userId varchar(400) NOT NULL +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; +alter table users + add isStudent tinyint(1) default '1' null; -/*!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/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/AnnotationTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/AnnotationTest.java new file mode 100644 index 0000000000000000000000000000000000000000..6c64c0be2de3d76d89849450bb797ab921876b79 --- /dev/null +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/AnnotationTest.java @@ -0,0 +1,186 @@ +package unipotsdam.gf.interfaces; + +import org.junit.Before; +import org.junit.Test; +import unipotsdam.gf.modules.annotation.controller.AnnotationController; +import unipotsdam.gf.modules.annotation.model.Annotation; +import unipotsdam.gf.modules.annotation.model.AnnotationPatchRequest; +import unipotsdam.gf.modules.annotation.model.AnnotationPostRequest; + +import java.util.ArrayList; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +/** + * @author Sven Kästle + * skaestle@uni-potsdam.de + */ +public class AnnotationTest { + + // declare annotation controller + AnnotationController controller; + + @Before + public void initializeTest() { + // initialize controller + controller = new AnnotationController(); + } + + @Test + public void testAddAnnotation() { + + // initialize body + String body = "body_testAddAnnotation"; + + // prepare and execute request + AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest(1, 2, body, 4, 5); + Annotation response = controller.addAnnotation(annotationPostRequest); + + // the new annotation should be found in the database + assertTrue("Can't find annotation with the id " + response.getId(), controller.existsAnnotationId(response.getId())); + + // delete the new annotation + controller.deleteAnnotation(response.getId()); + + } + + @Test + public void testAlterAnnotation() { + + // initialize old and new body + String oldBody = "bodyOld_testAlterAnnotation"; + String newBody = "bodyNew_testAlterAnnotation"; + + // save new annotation in database + AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest(0, 0, oldBody, 0, 0); + Annotation response = controller.addAnnotation(annotationPostRequest); + + // the new annotation should be found in the database + assertTrue("Can't find annotation with the id " + response.getId(), controller.existsAnnotationId(response.getId())); + + // the annotation's body should be "testAlterAnnotation_oldBody" + assertEquals("The body of the annotation should be " + oldBody + " but was " + response.getBody(), oldBody, response.getBody()); + + // alter the annotation and update the database + AnnotationPatchRequest annotationPatchRequest = new AnnotationPatchRequest(newBody); + controller.alterAnnotation(response.getId(), annotationPatchRequest); + + // receive the new annotation + Annotation newResponse = controller.getAnnotation(response.getId()); + + // the annotation's body should be "testAlterAnnotation_newBody" + assertEquals("The body of the annotation should be " + newBody + " but was " + newResponse.getBody(), newBody, newResponse.getBody()); + + // delete the annotation + controller.deleteAnnotation(response.getId()); + + + } + + @Test + public void testDeleteAnnotation() { + + // initialize old and new body + String body = "body_testDeleteAnnotation"; + + // save new annotation in database + AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest(0, 0, body, 0, 0); + Annotation response = controller.addAnnotation(annotationPostRequest); + + // the new annotation should be found in the database + assertTrue("Can't find annotation with the id " + response.getId(), controller.existsAnnotationId(response.getId())); + + // delete the annotation + controller.deleteAnnotation(response.getId()); + + // the annotation shouldn't be found in the database + assertFalse("There shouldn't be an annotation with the id " + response.getId(), controller.existsAnnotationId(response.getId())); + + } + + @Test + public void testGetAnnotation() { + + // initialize body + String body = "body_testGetAnnotation"; + + // save new annotation in database + AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest(0, 0, body, 0, 0); + Annotation response = controller.addAnnotation(annotationPostRequest); + + // receive the new annotation + Annotation getResponse = controller.getAnnotation(response.getId()); + + // the annotation's body should be "testAlterAnnotation_newBody" + assertEquals("The body of the annotation should be " + body + " but was " + getResponse.getBody(), body, getResponse.getBody()); + + // delete the new annotation + controller.deleteAnnotation(response.getId()); + + } + + @Test + public void testGetAnnotations() { + + // initialize bodys + String body1 = "body1_testGetAnnotations"; + String body2 = "body2_testGetAnnotations"; + String body3 = "body3_testGetAnnotations"; + + // initialize targetIds + ArrayList<Integer> targetIds = new ArrayList<>(); + targetIds.add(-1); + targetIds.add(-2); + + // save new annotations in database + AnnotationPostRequest request1 = new AnnotationPostRequest(0, targetIds.get(0), body1, 0, 0); + AnnotationPostRequest request2 = new AnnotationPostRequest(0, targetIds.get(1), body2, 0, 0); + AnnotationPostRequest request3 = new AnnotationPostRequest(0, targetIds.get(1), body3, 0, 0); + controller.addAnnotation(request1); + controller.addAnnotation(request2); + controller.addAnnotation(request3); + + // receive the new annotations + ArrayList<Annotation> getResponse = controller.getAnnotations(targetIds.get(1)); + + // the size of the getResponse should be 2 + assertEquals("The size of the response should be 2 but was " + getResponse.size(), 2, getResponse.size()); + + // receive the new annotations + ArrayList<Annotation> getResponseNew = controller.getAnnotations(targetIds.get(0)); + + // the size of the getResponse should be 2 + assertEquals("The size of the response should be 1 but was " + getResponseNew.size(), 1, getResponseNew.size()); + + // delete annotations from database + controller.deleteAnnotation(getResponse.get(0).getId()); + controller.deleteAnnotation(getResponse.get(1).getId()); + controller.deleteAnnotation(getResponseNew.get(0).getId()); + + } + + @Test + public void testExistsAnnotationId() { + + // initialize body and bad id + String body = "body_testExistsAnnotationId"; + String badId = "badId"; + + // save new annotation in database + AnnotationPostRequest annotationPostRequest = new AnnotationPostRequest(0, 0, body, 0, 0); + Annotation response = controller.addAnnotation(annotationPostRequest); + + // the annotation shouldn't be found in the database + assertFalse("There shouldn't be an annotation with the id " + badId, controller.existsAnnotationId(badId)); + + // the new annotation should be found in the database + assertTrue("There should be an annotation with the id " + response.getId(), controller.existsAnnotationId(response.getId())); + + // delete annotation from database + controller.deleteAnnotation(response.getId()); + + } + +} diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ManagementTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ManagementTest.java index 9463acbdaa8eb72ef80b9bd13b4fe856c033eed8..8e71c0dcba017d321a6af5540fb843ea8ff7352c 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ManagementTest.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ManagementTest.java @@ -6,12 +6,10 @@ import unipotsdam.gf.core.management.project.Project; import unipotsdam.gf.core.management.user.User; import unipotsdam.gf.core.management.user.UserProfile; -import java.sql.Timestamp; -import java.time.LocalDateTime; -import java.time.ZoneId; import java.util.List; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; /** * Created by dehne on 01.06.2018. @@ -19,16 +17,15 @@ import static org.junit.Assert.*; public class ManagementTest { @Test - public void testDelete() throws Exception { + public void testDelete() { } /** * CREATE a user in the DB using the - * @throws Exception */ @Test - public void testExists() throws Exception { + public void testExists() { ManagementImpl management = new ManagementImpl(); User user = new User("julian", "1234", "from1123123123@stuff.com", true); assert !management.exists(user); @@ -36,10 +33,9 @@ public class ManagementTest { /** * CREATE a user in the DB using the - * @throws Exception */ @Test - public void testCreate() throws Exception { + public void testCreate() { ManagementImpl management = new ManagementImpl(); User user = new User("julian", "1234", "from@stuff.com", false); management.create(user, new UserProfile()); @@ -48,35 +44,49 @@ public class ManagementTest { /** * Test creating a user in the DB - * @throws Exception */ @Test - public void testCreate1() throws Exception { + public void testCreate1() { ManagementImpl management = new ManagementImpl(); - management.create(new Project("Gemainsam Forschen", "1235", "1", "me", "keins")); + management.create(new Project("Gemainsam Forschen", "1235", true, "me", "keins")); } @Test - public void testRegister() throws Exception { + public void testRegister() { ManagementImpl management = new ManagementImpl(); User user = new User("julian", "1234", "from@stuff.com", true); management.create(user, new UserProfile()); assert management.exists(user); - Project project = new Project("Gemainsam Forschen", "1235", "1", "me", "keins"); + Project project = new Project("Gemainsam Forschen", "1235", true, "me", "keins"); management.create(project); management.register(user, project, null); } @Test - public void testGetUsers() throws Exception { + public void testUpdateUser() { + ManagementImpl management = new ManagementImpl(); + User user = new User("julian", "1234", "testUpdateUser@stuff.com", true); + user.setToken("abc"); + management.create(user, new UserProfile()); + assertTrue(management.exists(user)); + + user.setStudent(false); + management.update(user); + assertTrue(management.exists(user)); + User managementUser = management.getUserByToken(user.getToken()); + assertEquals(user.getStudent(), managementUser.getStudent()); + } + + @Test + public void testGetUsers() { ManagementImpl management = new ManagementImpl(); User user = new User("julian", "1234", "from@stuff.com", false); management.create(user, new UserProfile()); assert management.exists(user); - Project project = new Project("Gemainsam Forschen", "1235", "1", "me", "keins"); + Project project = new Project("Gemainsam Forschen", "1235", true, "me", "keins"); management.create(project); management.register(user, project, null); diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java index 78071ead4c147d7f152f09c84f65b3b36e383713..564d54cca5d699c5c93b3e56d64ee0e91bd8057a 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java @@ -2,10 +2,10 @@ package unipotsdam.gf.modules.assessment; import org.junit.Test; import unipotsdam.gf.interfaces.IPeerAssessment; -import unipotsdam.gf.modules.assessment.controller.Assessment; -import unipotsdam.gf.modules.assessment.controller.FBAssessement; -import unipotsdam.gf.modules.assessment.controller.Performance; -import unipotsdam.gf.modules.assessment.controller.StudentIdentifier; +import unipotsdam.gf.modules.assessment.controller.model.Assessment; +import unipotsdam.gf.modules.assessment.controller.service.FBAssessement; +import unipotsdam.gf.modules.assessment.controller.model.Performance; +import unipotsdam.gf.modules.assessment.controller.model.StudentIdentifier; public class TestAddAssessment { @@ -24,7 +24,7 @@ public class TestAddAssessment { workRating[2] = 4; //Hilfsbereitschaft oder so StudentIdentifier student = new StudentIdentifier("Spaß", "Haralf"); - Performance performance = new Performance(quizAnswers,"so ein toller Typ", workRating); + Performance performance = new Performance(student, quizAnswers,"so ein toller Typ", workRating); Assessment assessment = new Assessment(student, performance); iPeerAssessment.addAssessmentDataToDB(assessment); } diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/view/CommunicationViewTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/view/CommunicationViewTest.java new file mode 100644 index 0000000000000000000000000000000000000000..d9bbfc17d3e19b4b5d5a737134c5b90c445a13a8 --- /dev/null +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/communication/view/CommunicationViewTest.java @@ -0,0 +1,128 @@ +package unipotsdam.gf.modules.communication.view; + +import org.glassfish.jersey.test.JerseyTest; +import org.glassfish.jersey.test.util.runner.ConcurrentRunner; +import org.junit.Test; +import org.junit.runner.RunWith; +import unipotsdam.gf.config.GFResourceConfig; +import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.modules.communication.model.Message; +import unipotsdam.gf.modules.communication.model.chat.ChatRoom; + +import javax.ws.rs.client.Entity; +import javax.ws.rs.core.Application; +import javax.ws.rs.core.Response; +import java.util.ArrayList; +import java.util.List; + +import static javax.ws.rs.core.Response.Status.BAD_REQUEST; +import static javax.ws.rs.core.Response.Status.CREATED; +import static javax.ws.rs.core.Response.Status.NOT_FOUND; +import static javax.ws.rs.core.Response.Status.OK; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; + +@RunWith(ConcurrentRunner.class) +public class CommunicationViewTest extends JerseyTest { + + private final static String ENDPOINT = "chat/"; + + @Override + protected Application configure() { + CommunicationView communicationView = new CommunicationView(); + GFResourceConfig gfResourceConfig = new GFResourceConfig(); + gfResourceConfig.register(communicationView); + return gfResourceConfig; + } + + @Test + public void getChatRoomInformation() { + String path = ENDPOINT + "info/"; + Response responseOk = target().path(path + "1").request().get(); + assertThat(responseOk.getStatus(), is(OK.getStatusCode())); + assertNotNull(responseOk.readEntity(ChatRoom.class)); + + Response responseNotFound = target().path(path).request().get(); + assertThat(responseNotFound.getStatus(), is(NOT_FOUND.getStatusCode())); + } + + @Test + public void getChatHistory() { + String path = ENDPOINT + "history/"; + Response responseOk = target().path(path + "1").request().get(); + assertThat(responseOk.getStatus(), is(OK.getStatusCode())); + assertNotNull(responseOk.readEntity(List.class)); + + Response responseNotFound = target().path(path).request().get(); + assertThat(responseNotFound.getStatus(), is(NOT_FOUND.getStatusCode())); + } + + @Test + public void createChatRoom() { + String path = ENDPOINT + "create"; + Response responseOk = target().path(path).queryParam("name", "test").request().post(null); + assertThat(responseOk.getStatus(), is(CREATED.getStatusCode())); + assertNotNull(responseOk.readEntity(String.class)); + + ArrayList<User> users = new ArrayList<>(); + users.add(new User("test", "test", "test", true)); + Response responseOk2 = target().path(path).queryParam("name", "test").request().post(Entity.json(users)); + assertThat(responseOk2.getStatus(), is(CREATED.getStatusCode())); + assertNotNull(responseOk2.readEntity(String.class)); + + Response responseBadRequest = target().path(path).request().post(Entity.json(users)); + assertThat(responseBadRequest.getStatus(), is(BAD_REQUEST.getStatusCode())); + } + + @Test + public void sendMessage() { + String path = ENDPOINT + "send"; + Message message = new Message(); + message.setMessage("test"); + message.setRoomIdOrChannel("1"); + Response responseOk = target().path(path + "/1").request().post(Entity.json(message)); + assertThat(responseOk.getStatus(), is(OK.getStatusCode())); + assertNotNull(responseOk.readEntity(String.class)); + + Response responseBadRequest = target().path(path + "/1").request().post(Entity.json(null)); + assertThat(responseBadRequest.getStatus(), is(BAD_REQUEST.getStatusCode())); + } + + @Test + public void addUserToChatRoom() { + String fullPath = ENDPOINT + "addUser" + "/1"; + + User user = new User("test", "test", "test", true); + Response responseOk = target().path(fullPath).request().post(Entity.json(user)); + assertThat(responseOk.getStatus(), is(OK.getStatusCode())); + assertNotNull(responseOk.readEntity(String.class)); + + Response responseBadRequest = target().path(fullPath).request().post(Entity.json(null)); + assertThat(responseBadRequest.getStatus(), is(BAD_REQUEST.getStatusCode())); + } + + @Test + public void removeUserFromChatRoom() { + String fullPath = ENDPOINT + "removeUser" + "/1"; + + User user = new User("test2", "test2", "test", true); + Response responseOk = target().path(fullPath).request().post(Entity.json(user)); + assertThat(responseOk.getStatus(), is(OK.getStatusCode())); + assertNotNull(responseOk.readEntity(String.class)); + + Response responseBadRequest = target().path(fullPath).request().post(Entity.json(null)); + assertThat(responseBadRequest.getStatus(), is(BAD_REQUEST.getStatusCode())); + } + + @Test + public void setChatRoomTopic() { + String fullPath = ENDPOINT + "setTopic" + "/1"; + Response responseOk = target().path(fullPath).queryParam("topic", "test").request().post(null); + assertThat(responseOk.getStatus(), is(OK.getStatusCode())); + assertNotNull(responseOk.readEntity(String.class)); + + Response responseBadRequest = target().path(fullPath).request().post(Entity.json(null)); + assertThat(responseBadRequest.getStatus(), is(BAD_REQUEST.getStatusCode())); + } +}