Input/Output Enter der OS-Kommandozeile nachstellen

Kaibear

Aktives Mitglied
Moin moin werte Gemeinde,

ich habe folgendes Problem: Über die Command-Line will ich mich auf eine externe Repository in SVN anmelden, dabei gehe ich so vor, dass ich "svn info [REPOSITORYPATH] --username [MEINNAME] --password [MEINPASSWORD]" eingebe. Da es keinen login-Befehl via Commandline gibt, baue ich das über einen Dummy-Aufruf der "info" auf. Über die Commandline funktioniert das super, ich werde nur danach gefragt, ob ich <R> Reject, <T> Temporary oder <P> Permantly die Daten speichern will.

In einem Java-Tool soll diese Methode auch genutzt werden, da bisher auch in dem Tool alles über Commandline läuft. Nur wie baue ich es hierbei nach?

Meine bisherige Implementierung ist nicht gerade verheißungsvoll, ich bekomme immer den Error, dass meine Daten für die Anmeldung nicht übereinstimmen.

Meine Repository-Class mit den involvierten Befehlen:
Java:
public boolean loginCheck() {
		try {
			this.executeCommand(TextConstants.svnDummy + Main.REPO
					+ TextConstants.BLANK + TextConstants.svnSubComUser
					+ TextConstants.BLANK + TextConstants.USERNAME + TextConstants.BLANK
					+ TextConstants.svnSubComPass + TextConstants.BLANK
					+ TextConstants.PASSWORD + TextConstants.OS_NEW_LINE + TextConstants.svnAcceptPerm);
			return true;
		} catch (SVNException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
	}

protected String executeCommand(String command) throws SVNException {
		try {
			Process pr = Runtime.getRuntime().exec(command);
			handleCommandLineErrorStream(pr);
			return handleCommandLineInputStream(pr);
		} catch (IOException e) {
			throw new SVNException("IOException: Executing Command failed", e);
		}
	}

	private String handleCommandLineInputStream(Process pr) throws IOException {
		BufferedReader stdInput = new BufferedReader(new InputStreamReader(
				pr.getInputStream()));
		String iLine;
		StringBuilder sb = new StringBuilder();
		boolean first = true;
		while ((iLine = stdInput.readLine()) != null) {
			if (!first) {
				sb.append(TextConstants.NEWLINE);
			}
			sb.append(iLine);
			first = false;
		}
		return sb.toString();
	}

	private void handleCommandLineErrorStream(Process pr) throws IOException,
			SVNException {
		BufferedReader stdError = new BufferedReader(new InputStreamReader(
				pr.getErrorStream()));
		String eLine;
		StringBuilder sb = new StringBuilder();
		boolean errors = false;
		while ((eLine = stdError.readLine()) != null) {
			if (errors) {
				sb.append(TextConstants.NEWLINE);
			}
			sb.append(eLine);
			errors = true;
		}

Meine TextConstants-Klasse:
Hierbei wird Username / Password nach einem Button-Klick in der GUI von den Textfeldern übergeben. Funktioniert auch tadellos, ein System.out.println() gibt bei Inhalt des executeCommand(...) der LoginCheck-Funktion auch genau das aus, was ich brauche.
Java:
	public static final String svnSubComUser = "--username";
	public static final String svnSubComPass = "--password";
	public static final String svnDummy = "svn info ";
	public static String PASSWORD = "";
	public static String USERNAME = "";
	public static final String OS_NEW_LINE = System
			.getProperty("line.separator");

Jetzt ist die Frage:

Wie kann ich das Enter des ersten Befehls simulieren, sodass ich die Abfrage auf das <R>,<T>,<P> erhalte und wie kann ich das ausführen des <P> miteinbinden?

Ich habe bisher mit "\n", "\r" und wie aus der TextConstants.Class ersichtlich ist, mit line.seperator des OS gewerkelt, aber nichts bringt das was gebraucht wird.
 

Kaibear

Aktives Mitglied
Oder besser gefragt:

Wie kann man einen Kommandozeilen Befehl des Betriebssystems ausführen, der nach Eingabe später einen weiteren Parameter abfragt, der dann eingegeben werden muss?
 

Kaibear

Aktives Mitglied
Oder kennt jemand eine andere Möglichkeit sich über "https://..." für das SVN einzuloggen? Eine SVNKit-freie Möglichkeit wäre präferiert, da ich das eigentlich da raus halten wollte und meine Klassen umändern müsste, wenn SVNKit dazukäme.
 

Kaibear

Aktives Mitglied
Leider nutzen der Server und SVN unterschiedliche Authentifications... wäre cool gewesen wenn ich den user nur auf den Server einloggen lassen müsste und er in SVN dann auch geloggt wäre...

Aber das hat mich auf eine andere Idee gebracht. Eventuell sind Parameter in den SVN Configs, die ein Wegfall der "temporary" oder "permanantly" Abfrage ermöglichen.

Kennt sich diesbezüglich wer in den Configs aus?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Kirby.exe Keyboard Input ohne Enter Allgemeine Java-Themen 43
P String nach ENTER durchsuchen Allgemeine Java-Themen 6
DStrohma [Erledigt] Wieso kann ich Taste 'ENTER' in JTable nicht belegen? Allgemeine Java-Themen 2
M Enter Taste in Konsole abfragen Allgemeine Java-Themen 2
T Einzelnes Zeichen von der Tastatur einlesen, aber ohne Enter Allgemeine Java-Themen 4
G default button für enter taste Allgemeine Java-Themen 3
M Ohne Enter weiter machen? Allgemeine Java-Themen 6
M Messen, wie oft ENTER gedrückt wurde Allgemeine Java-Themen 10
G Enter-Taste simulieren Allgemeine Java-Themen 14
B JComboBox-Eintrag ohne Enter aktualisieren Allgemeine Java-Themen 2
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
M Threads über Kommandozeile Allgemeine Java-Themen 5
J Sudoku Kommandozeile Allgemeine Java-Themen 13
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
M Kommandozeile und Sonderzeichen Allgemeine Java-Themen 2
I bibliotheken nur via kommandozeile laden Allgemeine Java-Themen 16
J mailx Kommandozeile Allgemeine Java-Themen 5
W Probleme beim Ausführen einer Java Klasse auf Kommandozeile Allgemeine Java-Themen 17
M Kommandozeile von Windows steuern Allgemeine Java-Themen 2
A Bild über Kommandozeile ausgeben? Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben