Neuste Artikel aller Themen


      
Git
16.05.2022

Stash


Die Staging Area ist so eine Art Zwischenablage. In dieser können Änderungen zwischengespeichert werden. Beispielsweise, wenn man mal kurz den Branch wechseln möchte ohne die vorhandenen Änderungen im aktuelle Branch zu commiten.


git stash um Änderungen zwischenzulagern
git stash pop um Änderungen wieder einzuspielen (stashing area wird bei Erfolg gelöscht)
git stash apply um Änderungen wieder einzuspielen (stashing area wird nicht gelöscht)
git stash clear stashing area wird gelöscht
git stash list zeigt den Inhalt der stashing area



      
Git
16.05.2022

Add


add

git add . fügt alle geänderten Dateien hinzu (zwischen "add" und dem "." muss ein Leerzeichen sein!).
git add myFilePath fügt eine bestimmte Datei hinzu.



      
Git
16.05.2022

Commit


Commit durchführen

git -m "MyCommitMessage"
(Bedingung: vorher müssen mit add Dateien hinzugefügt werden)

Commit rückgängig machen

git reset --soft HEAD~1
Dabei bleiben die Änderungen erhalten!
Mit einer höheren Zahl (z.B.: 3) können mehrere commits rückgängig gemacht werden.
Mit anschließendem git commit kann man dann alles commiten (Also indirekt die commits zusammenfassen).

Commit-Message ändern

git commit --amend
War der commit bereits gepushed, so muss noch ein
git push -f
folgen.



      
Git
05.05.2022

Zeilenumbrüche


Leider gibt es verschiedenen Zeilenumbrüche, je nach System.
Windows:

git config --global core.autocrlf true

Linux u. Mac
git config --global core.autocrlf input



      
Git
04.05.2022

Branches


Branch wechseln

git checkout develop
Der aktuelle Branch ist nun develop

Branch prüfen

git branch
Der aktuelle Branch ist mit einem Sternchen gekennzeichnet

Neuen Branch erstellen

(Basis ist der aktuelle Branch, also develop):
git branch myOwnBranch

Pushen

... des neuen Branches in das remote repository
git push -u origin myOwnBranch

Mergen

... eines Branches in den aktuellen Branch (develop):
git merge anotherBranch

Branch zurücksetzen

git reset --hard origin/myOwnBranch
Alle(!) lokalen Änderungen werden verworfen und der Stand von origin wird wieder hergestellt.

Branch löschen

git branch -d myOwnBranch (löscht den Branch im lokalen Repository, aber nur, wenn er bereits gemergt wrude)
git branch -D myOwnBranch (löscht den Branch im lokalen Repository; git push anschließend löscht auch remote)



      
Java, allgemein
21.04.2021


EventBus - Example


EventBus.java


package com.sowas.eventbus;

import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;

/**
 * Simple event bus implementation.
 * Subscribe for and fire events.
 */
public enum EventBus {
   	INSTANCE;
   	
   	private final Map> subscribers = new ConcurrentHashMap<>();
   	
   	/**
   	 * Subscribe to an event type
   	 *
   	 * @param subscriber The subscriber which will consume the events.
   	 * @param eventClass The event class, can be a super class of Event.
   	 */
   	public void subscribe(ISubscriber subscriber, Class eventClass) {
   	    Objects.requireNonNull(subscriber, "subscriber");
   	    Objects.requireNonNull(eventClass, "eventClass");
   	
   	    subscribers.put(subscriber, eventClass);
   	}
   	
   	/**
   	 * Unsubscribe from all event types.
   	 *
   	 * @param subscriber the subscriber to unsubscribe.
   	 */
   	public void unsubscribe(ISubscriber subscriber) {
   	    Objects.requireNonNull(subscriber, "subscriber");
   	
   	    subscribers.remove(subscriber);
   	}
   	
   	/**
   	 * Publish an event to all subscribers for exactly this event type.
   	 *
   	 * @param event the event.
   	 */
   	public void fire(Event event) {
   	    subscribers.forEach((s, e) -> {
   	    	Class clazz;
   			try {
   				clazz = Class.forName(e.getName());
   			} catch (ClassNotFoundException ex) {
   				ex.printStackTrace();
   				return;
   			}
   	        if (clazz.isInstance(event)) {
   	    		s.handleEventfired(event);
   	    	}
   	    });
   	}
}

ISubscriber.java


package com.sowas.eventbus;

public interface ISubscriber {
   public void handleEventfired(Event event);
}

Event.java


package com.sowas.eventbus;

public class Event {
	private Object data;

	public Object getData() {
		return data;
	}

	public Event(Object data) {
		this.data = data;
	}
}

EventBusTest.java


package com.sowas.eventbus;

import static org.junit.Assert.assertEquals;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

/**
 * Test class for the EventBus.
 */
public class EventBusTest {
	int receivedEventsCount;

	/**
	 * Tests the subscribing for Event.
	 * All(!) Events should be handled.
	 */
	@Test
	public void testSubscribeEvent() {
		ISubscriber subscriber = new ISubscriber() {			
			@Override
			public void handleEventfired(Event event) {
				receivedEventsCount++;
			}
		};
		EventBus.INSTANCE.subscribe(subscriber, Event.class);
		receivedEventsCount = 0;
		EventBus.INSTANCE.fire(new Event(null));
		EventBus.INSTANCE.fire(new ExtendedEvent(null));
		assertEquals(2, receivedEventsCount);
		EventBus.INSTANCE.unsubscribe(subscriber);
	}

	/**
	 * Tests the subscribing for Event.
	 * Only ExtendedEvents should be handled.
	 */
	@Test
	public void testSubscribeDummyEvent() {
		ISubscriber subscriber = new ISubscriber() {			
			@Override
			public void handleEventfired(Event event) {
				receivedEventsCount++;
			}
		};
		EventBus.INSTANCE.subscribe(subscriber, ExtendedEvent.class);
		receivedEventsCount = 0;
		EventBus.INSTANCE.fire(new Event(null));
		EventBus.INSTANCE.fire(new ExtendedEvent(null));
		assertEquals(1, receivedEventsCount);
		EventBus.INSTANCE.unsubscribe(subscriber);
	}

	/**
	 * An Event extended from Event.
	 */
	class ExtendedEvent extends Event {
		public ExtendedEvent(Object data) {
			super(data);
		}
	}
}