Compare commits
2 Commits
ac9d7fdd39
...
1b07a3b6ab
Author | SHA1 | Date | |
---|---|---|---|
1b07a3b6ab | |||
701e732eb6 |
@@ -58,6 +58,12 @@ public class CashPoint implements SecurityClient {
|
|||||||
|
|
||||||
void charge(AccountCard accountCard) {
|
void charge(AccountCard accountCard) {
|
||||||
final int price = getPrice(accountCard.color);
|
final int price = getPrice(accountCard.color);
|
||||||
|
// zahlen methode
|
||||||
|
/*
|
||||||
|
|
||||||
|
zahlen bein acmgmt
|
||||||
|
|
||||||
|
*/
|
||||||
System.out.println("Charging " + price + " cents on account " + accountCard.getAccount());
|
System.out.println("Charging " + price + " cents on account " + accountCard.getAccount());
|
||||||
cents += price;
|
cents += price;
|
||||||
}
|
}
|
||||||
|
22
uebung07/src/quantities/generic/Length.java
Normal file
22
uebung07/src/quantities/generic/Length.java
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
package quantities.generic;
|
||||||
|
|
||||||
|
import static quantities.generic.LengthUnit.METER;
|
||||||
|
import static quantities.generic.TimeUnit.SECOND;
|
||||||
|
import static quantities.generic.VelocityUnit.METER_PER_SECOND;
|
||||||
|
|
||||||
|
public class Length extends Quantity<Length>{
|
||||||
|
|
||||||
|
public Length(double value, Unit<Length> unit) {
|
||||||
|
super(value, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Velocity div(Time t) {
|
||||||
|
return METER_PER_SECOND.quantity(this.value(METER) / t.value(SECOND));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Time div(Velocity v) {
|
||||||
|
return SECOND.quantity(this.value(METER) / v.value(METER_PER_SECOND));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
19
uebung07/src/quantities/generic/LengthUnit.java
Normal file
19
uebung07/src/quantities/generic/LengthUnit.java
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
package quantities.generic;
|
||||||
|
|
||||||
|
public class LengthUnit extends Unit<Length> {
|
||||||
|
public LengthUnit(String name, double baseFactor) {
|
||||||
|
super(name, baseFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final LengthUnit METER = new LengthUnit("m", 1);
|
||||||
|
public static final LengthUnit MILLIMETER = new LengthUnit("mm", 0.001);
|
||||||
|
public static final LengthUnit KILOMETER = new LengthUnit("km", 1000);
|
||||||
|
public static final LengthUnit MILE = new LengthUnit("mi", 1609.344);
|
||||||
|
public static final LengthUnit LIGHTYEAR = new LengthUnit("ly", 9460730472580800.0);
|
||||||
|
public static final LengthUnit PARSEC = new LengthUnit("pc", 3.0856776e16);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Length quantity(double value) {
|
||||||
|
return new Length(value, this);
|
||||||
|
}
|
||||||
|
}
|
55
uebung07/src/quantities/generic/Quantity.java
Normal file
55
uebung07/src/quantities/generic/Quantity.java
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
package quantities.generic;
|
||||||
|
|
||||||
|
public abstract class Quantity<Q extends Quantity<Q>> {
|
||||||
|
public final double value;
|
||||||
|
public final Unit<Q> unit;
|
||||||
|
|
||||||
|
protected Quantity(double value, Unit<Q> unit) {
|
||||||
|
this.value = value;
|
||||||
|
this.unit = unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getBaseValue() {
|
||||||
|
return value * unit.baseFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double value(Unit<Q> unit) {
|
||||||
|
return getBaseValue() / unit.baseFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
//neue Methoden
|
||||||
|
|
||||||
|
public Q plus(Q other) {
|
||||||
|
return unit.quantity(value + other.getBaseValue() / unit.baseFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Q minus(Q other) {
|
||||||
|
return unit.quantity(value - other.getBaseValue() / unit.baseFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Q mult(double f) {
|
||||||
|
return unit.quantity(value * f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Q div(double f) {
|
||||||
|
return unit.quantity(value / f);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Q to(Unit<Q> unit) {
|
||||||
|
return unit.quantity(getBaseValue() / unit.baseFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public double div(Q other) {
|
||||||
|
return getBaseValue() / other.getBaseValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return value + " " + unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String format(String fmt, Unit unit) {
|
||||||
|
return String.format(fmt, value(unit), unit);
|
||||||
|
}
|
||||||
|
}
|
11
uebung07/src/quantities/generic/Time.java
Normal file
11
uebung07/src/quantities/generic/Time.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package quantities.generic;
|
||||||
|
|
||||||
|
public class Time extends Quantity<Time> {
|
||||||
|
public Time(double value, Unit<Time> unit) {
|
||||||
|
super(value, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Length mult(Velocity v) {
|
||||||
|
return v.mult(this);
|
||||||
|
}
|
||||||
|
}
|
17
uebung07/src/quantities/generic/TimeUnit.java
Normal file
17
uebung07/src/quantities/generic/TimeUnit.java
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package quantities.generic;
|
||||||
|
|
||||||
|
public class TimeUnit extends Unit<Time> {
|
||||||
|
public TimeUnit(String name, double baseFactor) {
|
||||||
|
super(name, baseFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Time quantity(double value) {
|
||||||
|
return new Time(value, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final TimeUnit SECOND = new TimeUnit("s", 1);
|
||||||
|
public static final TimeUnit MINUTE = new TimeUnit("min", 60);
|
||||||
|
public static final TimeUnit HOUR = new TimeUnit("h", 3600);
|
||||||
|
public static final TimeUnit DAY = new TimeUnit("d", 86400);
|
||||||
|
}
|
18
uebung07/src/quantities/generic/Unit.java
Normal file
18
uebung07/src/quantities/generic/Unit.java
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
package quantities.generic;
|
||||||
|
|
||||||
|
public abstract class Unit<T extends Quantity<T>> {
|
||||||
|
public final String name;
|
||||||
|
public final double baseFactor;
|
||||||
|
|
||||||
|
public Unit(String name, double baseFactor) {
|
||||||
|
this.name = name;
|
||||||
|
this.baseFactor = baseFactor;
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract T quantity(double value);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
}
|
15
uebung07/src/quantities/generic/Velocity.java
Normal file
15
uebung07/src/quantities/generic/Velocity.java
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package quantities.generic;
|
||||||
|
|
||||||
|
import static quantities.generic.LengthUnit.METER;
|
||||||
|
import static quantities.generic.TimeUnit.SECOND;
|
||||||
|
import static quantities.generic.VelocityUnit.METER_PER_SECOND;
|
||||||
|
|
||||||
|
public class Velocity extends Quantity<Velocity> {
|
||||||
|
public Velocity(double value, Unit<Velocity> unit) {
|
||||||
|
super(value, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Length mult(Time t) {
|
||||||
|
return METER.quantity(this.value(METER_PER_SECOND) * t.value(SECOND));
|
||||||
|
}
|
||||||
|
}
|
16
uebung07/src/quantities/generic/VelocityUnit.java
Normal file
16
uebung07/src/quantities/generic/VelocityUnit.java
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
package quantities.generic;
|
||||||
|
|
||||||
|
public class VelocityUnit extends Unit<Velocity> {
|
||||||
|
public VelocityUnit(String name, double baseFactor) {
|
||||||
|
super(name, baseFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Velocity quantity(double value) {
|
||||||
|
return new Velocity(value, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final VelocityUnit METER_PER_SECOND = new VelocityUnit("m/s", 1);
|
||||||
|
public static final VelocityUnit KMH = new VelocityUnit("km/h", 1.0 / 3.6);
|
||||||
|
public static final VelocityUnit MPH = new VelocityUnit("mph", 0.44704);
|
||||||
|
}
|
34
uebung07/src/quantities/plain/Time.java
Normal file
34
uebung07/src/quantities/plain/Time.java
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package quantities.plain;
|
||||||
|
|
||||||
|
public class Time extends Quantity{
|
||||||
|
private final TimeUnit unit;
|
||||||
|
|
||||||
|
public Time(double value, TimeUnit unit) {
|
||||||
|
super(value, unit);
|
||||||
|
this.unit = unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Time plus(Time other) {
|
||||||
|
return new Time(value + other.getBaseValue() / unit.baseFactor, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Time minus(Time other) {
|
||||||
|
return new Time(value - other.getBaseValue() / unit.baseFactor, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Time mult(double f) {
|
||||||
|
return new Time(value * f, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Time div(double f) {
|
||||||
|
return new Time(value / f, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Time to(TimeUnit unit) {
|
||||||
|
return new Time(getBaseValue() / unit.baseFactor, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Length mult(Velocity v) {
|
||||||
|
return v.mult(this);
|
||||||
|
}
|
||||||
|
}
|
13
uebung07/src/quantities/plain/TimeUnit.java
Normal file
13
uebung07/src/quantities/plain/TimeUnit.java
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package quantities.plain;
|
||||||
|
|
||||||
|
public class TimeUnit extends Unit{
|
||||||
|
|
||||||
|
public TimeUnit(String name, double baseFactor) {
|
||||||
|
super(name, baseFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final TimeUnit SECOND = new TimeUnit("s", 1);
|
||||||
|
public static final TimeUnit MINUTE = new TimeUnit("m", 60);
|
||||||
|
public static final TimeUnit HOUR = new TimeUnit("h", 3600);
|
||||||
|
|
||||||
|
}
|
38
uebung07/src/quantities/plain/Velocity.java
Normal file
38
uebung07/src/quantities/plain/Velocity.java
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package quantities.plain;
|
||||||
|
|
||||||
|
import static quantities.plain.LengthUnit.METER;
|
||||||
|
import static quantities.plain.TimeUnit.SECOND;
|
||||||
|
import static quantities.plain.VelocityUnit.METER_PER_SECOND;
|
||||||
|
|
||||||
|
public class Velocity extends Quantity {
|
||||||
|
private final VelocityUnit unit;
|
||||||
|
|
||||||
|
public Velocity(double value, VelocityUnit unit) {
|
||||||
|
super(value, unit);
|
||||||
|
this.unit = unit;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Velocity plus(Velocity other) {
|
||||||
|
return new Velocity(value + other.getBaseValue() / unit.baseFactor, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Velocity minus(Velocity other) {
|
||||||
|
return new Velocity(value - other.getBaseValue() / unit.baseFactor, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Velocity mult(double f) {
|
||||||
|
return new Velocity(value * f, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Velocity div(double f) {
|
||||||
|
return new Velocity(value / f, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Velocity to(VelocityUnit unit) {
|
||||||
|
return new Velocity(getBaseValue() / unit.baseFactor, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Length mult(Time t) {
|
||||||
|
return new Length(this.value(METER_PER_SECOND) * t.value(SECOND), METER);
|
||||||
|
}
|
||||||
|
}
|
13
uebung07/src/quantities/plain/VelocityUnit.java
Normal file
13
uebung07/src/quantities/plain/VelocityUnit.java
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
package quantities.plain;
|
||||||
|
|
||||||
|
public class VelocityUnit extends Unit{
|
||||||
|
|
||||||
|
public VelocityUnit(String name, double baseFactor) {
|
||||||
|
super(name, baseFactor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final VelocityUnit KMH = new VelocityUnit("kmh", 1000/3600); // 1/3.6
|
||||||
|
public static final VelocityUnit MPH = new VelocityUnit("mph", 1609.344/3600);
|
||||||
|
public static final VelocityUnit METER_PER_SECOND = new VelocityUnit("meter per second", 1);
|
||||||
|
|
||||||
|
}
|
63
uebung08/src/doc/Book.java
Normal file
63
uebung08/src/doc/Book.java
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
package doc;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
public class Book{
|
||||||
|
private String title;
|
||||||
|
private String author;
|
||||||
|
private List<TextComponent> contents;
|
||||||
|
|
||||||
|
public Book(String author, String title, List<TextComponent> contents){
|
||||||
|
this.title = title;
|
||||||
|
this.author = author;
|
||||||
|
this.contents = contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int countWords(){
|
||||||
|
Section helpSection = new Section("help", contents);
|
||||||
|
return helpSection.countWords();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int countWordsByVisitor(){
|
||||||
|
CountWordsVisitor countWords = new CountWordsVisitor();
|
||||||
|
int wordCount = 0;
|
||||||
|
for(TextComponent i : contents){
|
||||||
|
wordCount += i.accept(countWords);
|
||||||
|
}
|
||||||
|
return wordCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public List<String> tableOfContents(){
|
||||||
|
TableOfContentsVisitor contentTable = new TableOfContentsVisitor();
|
||||||
|
List<String> returnedContent = new ArrayList<String>();
|
||||||
|
|
||||||
|
for(TextComponent e : contents){
|
||||||
|
//contentTable.setPrefix(Integer.toString(itteration));
|
||||||
|
List<String> returned = e.accept(contentTable);
|
||||||
|
if(returned != null){
|
||||||
|
returnedContent.addAll(returned);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return returnedContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String toText(){
|
||||||
|
StringBuilder st = new StringBuilder();
|
||||||
|
ToTextVisitor textVisitor = new ToTextVisitor();
|
||||||
|
st.append(" ");
|
||||||
|
st.append(author);
|
||||||
|
st.append("\n");
|
||||||
|
st.append(title);
|
||||||
|
st.append("\n\n");
|
||||||
|
for(TextComponent i : contents){
|
||||||
|
st.append(i.accept(textVisitor));
|
||||||
|
st.append("\n");
|
||||||
|
}
|
||||||
|
return st.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
148
uebung08/src/doc/BookDemo.java
Normal file
148
uebung08/src/doc/BookDemo.java
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
package doc;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class BookDemo {
|
||||||
|
private static final String TEXT0 = "Über Entwurf und Realisierung eierlegender Wollmilchsäue.";
|
||||||
|
private static final String TEXT1 = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod " +
|
||||||
|
"tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. " +
|
||||||
|
"At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd " +
|
||||||
|
"gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum " +
|
||||||
|
"dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor " +
|
||||||
|
"invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.";
|
||||||
|
private static final String TEXT2 = "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie " +
|
||||||
|
"consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan " +
|
||||||
|
"et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis " +
|
||||||
|
"dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer " +
|
||||||
|
"adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore " +
|
||||||
|
"magna aliquam erat volutpat.";
|
||||||
|
private static final String TEXT3 = "Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit " +
|
||||||
|
"lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure " +
|
||||||
|
"dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore " +
|
||||||
|
"eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim " +
|
||||||
|
"qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla " +
|
||||||
|
"facilisi.";
|
||||||
|
private static final String TEXT4 = "Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming " +
|
||||||
|
"id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, " +
|
||||||
|
"consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet " +
|
||||||
|
"dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud " +
|
||||||
|
"exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo " +
|
||||||
|
"consequat.";
|
||||||
|
private static final String TEXT5 = "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie " +
|
||||||
|
"consequat, vel illum dolore eu feugiat nulla facilisis.";
|
||||||
|
private static final String TEXT6 = "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, " +
|
||||||
|
"no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, " +
|
||||||
|
"consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et " +
|
||||||
|
"dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo " +
|
||||||
|
"duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est " +
|
||||||
|
"Lorem ipsum dolor sit amet.";
|
||||||
|
private static final String TEXT7 = "Consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore " +
|
||||||
|
"et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et " +
|
||||||
|
"justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata " +
|
||||||
|
"sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur " +
|
||||||
|
"sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore " +
|
||||||
|
"magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo " +
|
||||||
|
"dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est " +
|
||||||
|
"Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing " +
|
||||||
|
"elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam " +
|
||||||
|
"erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea " +
|
||||||
|
"rebum. Stet clita kasd gubergren, no sea takimata sanctus.";
|
||||||
|
private static final String TEXT8 = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy " +
|
||||||
|
"eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam " +
|
||||||
|
"voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet " +
|
||||||
|
"clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit " +
|
||||||
|
"amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam " +
|
||||||
|
"nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed " +
|
||||||
|
"diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet " +
|
||||||
|
"clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. ";
|
||||||
|
private static final String TEXT9 = "Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie " +
|
||||||
|
"consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan " +
|
||||||
|
"et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis " +
|
||||||
|
"dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer " +
|
||||||
|
"adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore " +
|
||||||
|
"magna aliquam erat volutpat.";
|
||||||
|
private static final String TEXT10 = "Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit " +
|
||||||
|
"lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure " +
|
||||||
|
"dolor in hendrerit in vulputate velit esse molestie consequat, vel illum " +
|
||||||
|
"dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio " +
|
||||||
|
"dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te " +
|
||||||
|
"feugait nulla facilisi.";
|
||||||
|
private static final String TEXT11 = "Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet " +
|
||||||
|
"doming id quod mazim placerat facer possim assum. Lorem ipsum dolor sit amet, " +
|
||||||
|
"consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut " +
|
||||||
|
"laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, " +
|
||||||
|
"quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex " +
|
||||||
|
"ea commodo";
|
||||||
|
private static final String TEXT12 = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy " +
|
||||||
|
"eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam " +
|
||||||
|
"voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet " +
|
||||||
|
"clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit " +
|
||||||
|
"amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam " +
|
||||||
|
"nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed " +
|
||||||
|
"diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet " +
|
||||||
|
"clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";
|
||||||
|
private static final String TEXT13 = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy " +
|
||||||
|
"eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam " +
|
||||||
|
"voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita " +
|
||||||
|
"kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.";
|
||||||
|
private static final String TEXT14 = "At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, " +
|
||||||
|
"no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit " +
|
||||||
|
"amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut " +
|
||||||
|
"labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam " +
|
||||||
|
"et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata " +
|
||||||
|
"sanctus est Lorem ipsum dolor sit amet.";
|
||||||
|
private static final String TEXT15 = "Lorem ipsum dolor sit amet, consetetur sadipscing " +
|
||||||
|
"elitr, At accusam aliquyam diam diam dolore dolores duo eirmod eos erat, et " +
|
||||||
|
"nonumy sed tempor et et invidunt justo labore Stet clita ea et gubergren, kasd " +
|
||||||
|
"magna no rebum. sanctus sea sed takimata ut vero voluptua. est Lorem ipsum " +
|
||||||
|
"dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed " +
|
||||||
|
"diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.";
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
final Book book = makeBook();
|
||||||
|
|
||||||
|
// Aufgabe 1
|
||||||
|
System.out.println("Buch enthält " + book.countWords() + " Wörter");
|
||||||
|
|
||||||
|
// Aufgabe 2
|
||||||
|
System.out.println("Buch enthält " + book.countWordsByVisitor() + " Wörter");
|
||||||
|
System.out.println("Inhalt: " + book.tableOfContents());
|
||||||
|
System.out.println(book.toText());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Book makeBook() {
|
||||||
|
final Section sec1 = new Section("Einführung",
|
||||||
|
List.of(new Paragraph(TEXT1),
|
||||||
|
new Paragraph(TEXT2)));
|
||||||
|
final Section sec2 = new Section("Hintergrund",
|
||||||
|
List.of(new Paragraph(TEXT3),
|
||||||
|
new Section("Geschichte",
|
||||||
|
List.of(new Paragraph(TEXT4),
|
||||||
|
new Image("https://www.bekannt.de/p1.pdf",
|
||||||
|
"Bild 1"),
|
||||||
|
new Paragraph(TEXT5))),
|
||||||
|
new Section("Literatur",
|
||||||
|
List.of(new Paragraph(TEXT6),
|
||||||
|
new Image("https://www.eh-klar.de/p2.pdf",
|
||||||
|
"Bild 2"),
|
||||||
|
new Paragraph(TEXT7),
|
||||||
|
new Image("https://www.jeder-weiss-es.de/p3.pdf",
|
||||||
|
"Bild 3"),
|
||||||
|
new Paragraph(TEXT8)))));
|
||||||
|
final Section sec3 = new Section("Idee",
|
||||||
|
List.of(new Paragraph(TEXT9)));
|
||||||
|
final Section sec4 = new Section("Umsetzung",
|
||||||
|
List.of(new Paragraph(TEXT10),
|
||||||
|
new Section("Entwurf",
|
||||||
|
List.of(new Paragraph(TEXT11),
|
||||||
|
new Section("Grobentwurf",
|
||||||
|
List.of(new Paragraph(TEXT12))),
|
||||||
|
new Section("Feinentwurf",
|
||||||
|
List.of(new Paragraph(TEXT13))))),
|
||||||
|
new Section("Realisierung",
|
||||||
|
List.of(new Paragraph(TEXT14)))));
|
||||||
|
final Section sec5 = new Section("Zusammenfassung und Ausblick", List.of(new Paragraph(TEXT15)));
|
||||||
|
return new Book("Peter Mustermann", "Die eierlegende Wollmilchsau",
|
||||||
|
List.of(new Paragraph(TEXT0), sec1, sec2, sec3, sec4, sec5));
|
||||||
|
}
|
||||||
|
}
|
38
uebung08/src/doc/CountWordsVisitor.java
Normal file
38
uebung08/src/doc/CountWordsVisitor.java
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package doc;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class CountWordsVisitor implements Visitor<Integer>{
|
||||||
|
|
||||||
|
public Integer visit(Paragraph e){
|
||||||
|
String text = e.getText();
|
||||||
|
int wordCount = 0;
|
||||||
|
boolean open = false;
|
||||||
|
for (char i : text.toCharArray()){
|
||||||
|
if(!open && Character.isAlphabetic(i)){
|
||||||
|
open = true;
|
||||||
|
}
|
||||||
|
else if(open && !Character.isAlphabetic(i)){
|
||||||
|
open = false;
|
||||||
|
wordCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (open){
|
||||||
|
open = false;
|
||||||
|
wordCount++;
|
||||||
|
}
|
||||||
|
return wordCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer visit(Image e){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer visit(Section e){
|
||||||
|
List<TextComponent> contents = e.getContents();
|
||||||
|
int wordCount = 0;
|
||||||
|
for (TextComponent c: contents){
|
||||||
|
wordCount += c.accept(this);
|
||||||
|
}
|
||||||
|
return wordCount;
|
||||||
|
}
|
||||||
|
}
|
29
uebung08/src/doc/Image.java
Normal file
29
uebung08/src/doc/Image.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package doc;
|
||||||
|
|
||||||
|
|
||||||
|
public class Image implements TextComponent{
|
||||||
|
private String url;
|
||||||
|
private String caption;
|
||||||
|
|
||||||
|
public Image(String url, String caption) {
|
||||||
|
|
||||||
|
this.url = url;
|
||||||
|
this.caption = caption;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int countWords(){
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUrl(){
|
||||||
|
return url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCaption(){
|
||||||
|
return caption;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T> T accept(Visitor<T> v){
|
||||||
|
return v.visit(this);
|
||||||
|
}
|
||||||
|
}
|
39
uebung08/src/doc/Paragraph.java
Normal file
39
uebung08/src/doc/Paragraph.java
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
package doc;
|
||||||
|
|
||||||
|
public class Paragraph implements TextComponent{
|
||||||
|
private String text;
|
||||||
|
|
||||||
|
public Paragraph(String text){
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText(){
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int countWords(){
|
||||||
|
int wordCount = 0;
|
||||||
|
boolean open = false;
|
||||||
|
|
||||||
|
for(char i : text.toCharArray()){
|
||||||
|
if(!open && Character.isAlphabetic(i)){
|
||||||
|
open = true;}
|
||||||
|
else if(open && !Character.isAlphabetic(i)){
|
||||||
|
open = false;
|
||||||
|
wordCount ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(open){
|
||||||
|
open = false;
|
||||||
|
wordCount++;
|
||||||
|
}
|
||||||
|
return wordCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public <T> T accept(Visitor<T> v){
|
||||||
|
return v.visit(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
35
uebung08/src/doc/Section.java
Normal file
35
uebung08/src/doc/Section.java
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package doc;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Section implements TextComponent{
|
||||||
|
|
||||||
|
private String header;
|
||||||
|
private List<TextComponent> contents;
|
||||||
|
|
||||||
|
public Section(String header, List<TextComponent> contents){
|
||||||
|
this.header = header;
|
||||||
|
this.contents = contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHeader(){
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<TextComponent> getContents(){
|
||||||
|
return contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int countWords(){
|
||||||
|
int wordCount = 0;
|
||||||
|
for(TextComponent i : contents){
|
||||||
|
wordCount = wordCount + i.countWords();
|
||||||
|
}
|
||||||
|
return wordCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public <T> T accept(Visitor<T> v){
|
||||||
|
return v.visit(this);
|
||||||
|
}
|
||||||
|
}
|
77
uebung08/src/doc/TableOfContentsVisitor.java
Normal file
77
uebung08/src/doc/TableOfContentsVisitor.java
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
package doc;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TableOfContentsVisitor implements Visitor <List<String>>{
|
||||||
|
|
||||||
|
private String prefix = "1";
|
||||||
|
|
||||||
|
public TableOfContentsVisitor(){
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrefix(String pre){
|
||||||
|
prefix = pre;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> visit(Paragraph e){
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> visit(Image e){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public List<String> visit(Section e){
|
||||||
|
List<String> tabelOfContentsList = new ArrayList<String>();
|
||||||
|
List<TextComponent> copied = e.getContents();
|
||||||
|
|
||||||
|
String oldPrefix = prefix;
|
||||||
|
|
||||||
|
if(prefix.length() == 0){
|
||||||
|
tabelOfContentsList.add(prefix+ " " + e.getHeader());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
tabelOfContentsList.add(prefix + " " + e.getHeader());
|
||||||
|
}
|
||||||
|
|
||||||
|
int chapter = 1;
|
||||||
|
for(TextComponent i : e.getContents()){
|
||||||
|
|
||||||
|
String savedPrefix = prefix;
|
||||||
|
setPrefix(prefix + "." + Integer.toString(chapter));
|
||||||
|
|
||||||
|
List<String> returnedContent = i.accept(this);
|
||||||
|
if (returnedContent != null){
|
||||||
|
tabelOfContentsList.addAll(i.accept(this));
|
||||||
|
chapter++;
|
||||||
|
}
|
||||||
|
setPrefix(savedPrefix);
|
||||||
|
}
|
||||||
|
setPrefix(oldPrefix);
|
||||||
|
return tabelOfContentsList;
|
||||||
|
|
||||||
|
}*/
|
||||||
|
|
||||||
|
//Alternative die immer den aktuellen Stand übergibt und somit auf jeder "Ebene" ein eigener Visitor agiert
|
||||||
|
|
||||||
|
private int sectionCtr = 1;
|
||||||
|
|
||||||
|
public TableOfContentsVisitor(String prefix) {
|
||||||
|
this.prefix = prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> visit(Section section) {
|
||||||
|
final List<String> list = new ArrayList<>();
|
||||||
|
sectionCtr++;
|
||||||
|
list.add(prefix + sectionCtr + " " + section.getHeader());
|
||||||
|
final TableOfContentsVisitor subVisitor =
|
||||||
|
new TableOfContentsVisitor(prefix + sectionCtr + ".");
|
||||||
|
for (TextComponent c : section.getContents())
|
||||||
|
list.addAll(c.accept(subVisitor));
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
7
uebung08/src/doc/TextComponent.java
Normal file
7
uebung08/src/doc/TextComponent.java
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
package doc;
|
||||||
|
|
||||||
|
public interface TextComponent {
|
||||||
|
int countWords();
|
||||||
|
<T> T accept(Visitor<T> visitor);
|
||||||
|
|
||||||
|
}
|
38
uebung08/src/doc/ToTextVisitor.java
Normal file
38
uebung08/src/doc/ToTextVisitor.java
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package doc;
|
||||||
|
|
||||||
|
class ToTextVisitor implements Visitor<String> {
|
||||||
|
private final String prefix;
|
||||||
|
private int sectionCtr = 0;
|
||||||
|
private int imageCtr = 0;
|
||||||
|
|
||||||
|
public ToTextVisitor() {
|
||||||
|
this("");
|
||||||
|
}
|
||||||
|
|
||||||
|
public ToTextVisitor(String prefix) {
|
||||||
|
this.prefix = prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String visit(Paragraph section) {
|
||||||
|
return section.getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String visit(Image image) {
|
||||||
|
imageCtr++;
|
||||||
|
final String num = prefix + imageCtr;
|
||||||
|
return "<image " + image.getUrl() + ">\nFig. " + num + ": " + image.getCaption();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String visit(Section section) {
|
||||||
|
final StringBuilder b = new StringBuilder();
|
||||||
|
sectionCtr++;
|
||||||
|
b.append(prefix).append(sectionCtr).append(" ").append(section.getHeader());
|
||||||
|
final ToTextVisitor subVisitor = new ToTextVisitor(prefix + sectionCtr + ".");
|
||||||
|
for (TextComponent c : section.getContents())
|
||||||
|
b.append("\n\n").append(c.accept(subVisitor));
|
||||||
|
return b.toString();
|
||||||
|
}
|
||||||
|
}
|
10
uebung08/src/doc/Visitor.java
Normal file
10
uebung08/src/doc/Visitor.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package doc;
|
||||||
|
|
||||||
|
public interface Visitor<T> {
|
||||||
|
T visit(Image image);
|
||||||
|
T visit(Paragraph paragraph);
|
||||||
|
T visit(Section section);
|
||||||
|
|
||||||
|
// semantisch falsch
|
||||||
|
//T visit(TextComponent c);
|
||||||
|
}
|
Reference in New Issue
Block a user