Initial commit

This commit is contained in:
github-classroom[bot]
2022-03-17 08:42:05 +00:00
commit c346486299
51 changed files with 9317 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
/*
* Gradle build configuration for specific lab module / exercise
*/
// the Java plugin is added by default in the main lab configuration
plugins {
id 'java'
// Apply the application plugin to add support for building a CLI application.
id 'application'
// Adding JavaFX support and dependencies
id 'org.openjfx.javafxplugin' version '0.0.12'
}
// Project/Module information
description = 'Lab02 FXML WordCloud'
group = 'ch.zhaw.prog2'
version = '2022.1'
// Dependency configuration
// repositories to download dependencies from
repositories {
mavenCentral()
}
// required dependencies
dependencies {
}
// Configuration for Application plugin
application {
// Define the main class for the application.
mainClass = 'ch.zhaw.prog2.application.WordModel'
}
// Configuration for JavaFX plugin
javafx {
version = '17'
modules = [ 'javafx.controls', 'javafx.fxml' ]
}
// Java plugin configuration
java {
// By default the Java version of the gradle process is used as source/target version.
// This can be overridden, to ensure a specific version. Enable only if required.
// sourceCompatibility = JavaVersion.VERSION_17 // ensure Java source code compatibility
// targetCompatibility = JavaVersion.VERSION_17 // version of the created byte-code
// Java compiler specific options
compileJava {
// source files should be UTF-8 encoded
options.encoding = 'UTF-8'
// for more options see https://docs.gradle.org/current/dsl/org.gradle.api.tasks.compile.CompileOptions.html
}
}
@@ -0,0 +1,18 @@
package ch.zhaw.prog2.application;
/**
* Most basic interface for observing an object
* @author bles
*
*/
public interface IsObservable {
/**
* Add an observer that listens for updates
* @param observer
*/
void addListener(IsObserver observer);
/**
* Remove an observer from the list
* @param observer
*/
void removeListener(IsObserver observer);
}
@@ -0,0 +1,13 @@
package ch.zhaw.prog2.application;
/**
* Most basic interface for beeing an observer
* @author bles
*
*/
public interface IsObserver {
/**
* This method is always called when an observed object
* changes
*/
void update();
}
@@ -0,0 +1,36 @@
package ch.zhaw.prog2.application;
import java.util.HashMap;
import java.util.Map;
/**
* A WordModel object holds a map of words (String) with the actual count
* @author bles
*
*/
public class WordModel {
private Map<String, Integer> words = new HashMap<>();
public void addWord(String word) {
int count = words.getOrDefault(word, 0);
words.put(word, ++count);
}
public void removeWord(String word) {
int count = words.getOrDefault(word, 1);
if (count == 1) {
words.remove(word);
} else {
words.put(word, --count);
}
}
public String toString() {
StringBuilder sb = new StringBuilder();
for(Map.Entry<String, Integer> entry : words.entrySet()) {
sb.append(entry.getKey()).append(" - ").append(entry.getValue());
sb.append(System.lineSeparator());
}
return sb.toString();
}
}
@@ -0,0 +1,45 @@
package ch.zhaw.prog2.application;
import java.util.ArrayList;
import java.util.List;
/**
* Adds observable functionality to one WordModel-object.
* The decorator uses the original methods of the WordModel-object.
* @author bles
*
*/
public class WordModelDecorator implements IsObservable {
private final WordModel wordModel;
private List<IsObserver> listener = new ArrayList<>();
public WordModelDecorator(WordModel wordModel) {
this.wordModel = wordModel;
}
@Override
public void addListener(IsObserver observer) {
listener.add(observer);
}
@Override
public void removeListener(IsObserver observer) {
listener.remove(observer);
}
public void addWord(String word) {
wordModel.addWord(word);
informListener();
}
public void removeWord(String word) {
wordModel.removeWord(word);
informListener();
}
private void informListener() {
for(IsObserver observer : listener) {
observer.update();
}
}
}
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane xmlns:fx="http://javafx.com/fxml/1">
<!-- TODO Add Nodes -->
</AnchorPane>