Back to main Page

Mehre Fachklassen

Bei Resources handelt es sich um einen Folder. Aus diesem Gründen ist er nicht von GithubPages aus erreichbar. Um das ganze Projekt zu sehen muss es auf Github geöffnet werden.

YT Video

https://youtu.be/kUXTO1lwZzY

Wichtigste Klassen

Main

public class Main {

	public static void main(String... args) {
		Competition c = new Competition("Rotsee Regatta");
		Ship ship1 = new Ship(1, "Alinghi");
		Ship ship2 = new Ship(2, "Red Baron");
		Ship ship3 = new Ship(3, "Blue Lagoon");
		c.addShip(ship1); //add ships to competition
		c.addShip(ship2);
		c.addShip(ship3);
		c.start(); //start competition
		c.printResult(); //print ships with time

		System.out.println("\n\nGenerated UML:");
		UMLGenerator umlGenerator = new UMLGenerator();
		System.out.println(umlGenerator.generateUmlByPackage(Main.class.getPackageName()));
	}
	
}

Ship

public class Ship {

	private int nummer;
	private String name;
	private int time;

	public int getNummer() {
		return this.nummer;
	}

	public void setNummer(int nummer) {
		this.nummer = nummer;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getTime() {
		return this.time;
	}

	public void race() {
		Random random = new Random();
		this.time = random.nextInt(300) + 300;
	}

	public Ship(int nummer, String name) {

		this.nummer = nummer;
		this.name = name;
	}
}

Competition

public class Competition {
	private String name;
	private List<Ship> ships = new ArrayList<>();
	
	public Competition(String name) {
		this.name = name;
	}
	
	public String getName() {
		return this.name;
	}
	
	public void addShip(Ship ship) {
		if(ships.size() > 5) {
			System.err.println("Can't add a new Ship");
		}	
		this.ships.add(ship);
	}
	
	public void start() {
		for(Ship ship : this.ships) {
			ship.race();
		}
	}
	public void printResult() {
		for(Ship ship : this.ships) {
			System.out.println(String.format("Number: %s Name: %s Time: %s", ship.getNummer(), ship.getName(), ship.getTime()));
		}
	}
}

UML Generator

public class UMLGenerator {
	
	private String generateFields(Class<?> cls) {
		List<String> fields = new ArrayList<>();
		for(Field field : cls.getDeclaredFields()) {
			String accesModifiere = (field.getModifiers() & Modifier.PUBLIC) != 0 ? "+" : "-";
			String fieldName = field.getName();
			String dataType = field.getType().getSimpleName();
			fields.add(accesModifiere +  fieldName  +  " : " + dataType);
		}
		
		
		return String.join("\n", fields);
	}
	
	private String generateMethods(Class<?> cls) {
		List<String> methods = new ArrayList<>();
		for(Method method : cls.getDeclaredMethods()) {
			String accesModifiere = (method.getModifiers() & Modifier.PUBLIC) != 0 ? "+" : "-";
			String paramethers = "";
			for(Parameter paramether : method.getParameters()) {
				paramethers += paramether.getName() +  " : " + paramether.getType().getSimpleName() + " ";
			}
			String name = method.getName() + "("+paramethers+")";

			String returnValue = method.getReturnType().getSimpleName();
			
			methods.add(accesModifiere + name +" : " + returnValue);
		}
		return String.join("\n", methods);
	}
	
	private String generateConstructors(Class<?> cls) {
		List<String> construtors = new ArrayList<>();
		for(Constructor<?> constructor : cls.getDeclaredConstructors()) {
			String accesModifiere = (constructor.getModifiers() & Modifier.PUBLIC) != 0 ? "+" : "-";
			String paramethers = "";
			for(Parameter paramether : constructor.getParameters()) {
				paramethers += paramether.getName() +  " : " + paramether.getType().getSimpleName() + " ";
			}
			String name = cls.getSimpleName() + "("+paramethers+")";
			
			construtors.add(accesModifiere + name);
		}
		return String.join("\n", construtors);
	}
	
	public String generateUml(Class<?> cls){
		String fields = generateFields(cls);
		String constructors = generateConstructors(cls);
		String methods = generateMethods(cls);
		
		
		String uml = "Package: " + cls.getPackageName() + "\n";
		uml +=  "Name: " + cls.getSimpleName() + "\n";
		uml += "---\n";
		uml += fields +"\n";
		uml += "---\n";
		uml += constructors + "\n";
		uml += methods;
		
		return uml;
		
	}

	public String generateUmlByPackage(String packageName) {

		String uml = "";
		for(Class<?> cls : findAllClasses(packageName)) {
			uml += "**************************************\n";
			uml += generateUml(cls) + "\n\n";
			uml += "**************************************\n";
		}
		
		return uml;
	}
	
	
	private Set<Class> findAllClasses(String packageName) {
	    Reflections reflections = new Reflections(packageName, new SubTypesScanner(false));
	    return reflections.getSubTypesOf(Object.class)
	      .stream()
	      .collect(Collectors.toSet());
	}
}