/** * */ public Aktivitet(String navn, String krop, Objekt objekt, Model model) { if(funk.od) System.out.println(" - " + navn + " : " + krop);



Like dokumenter
Socket og ServerSocket

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

INF Løsning på seminaropppgaver til uke 8

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Løsningsforslag

Kapittel 9. Distribusjon. Fjernbruker. Tjenermaskin LAN WAN. Nærbruker. Figur 9-1: En enkel klient/tjener distribusjon

import java.io.*; import java.util.*; import javagently.text;

INF1010 våren Arv og subklasser - del 2

Repetisjon. INF gruppe 13

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

TOD063 Datastrukturer og algoritmer

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

UNIVERSITETET I OSLO

Løsningsforslag til eksamen i INF1000 våren 2006

Litt om pakker og mest om data inn og ut

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Løsningsforslag

import java.util.arraylist;

Eksamen Objektorientert Programmering 2012

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

OPPGAVE 5b og 8b Java Kode

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

IN2030. Oppgave 1. Løsningsforslag. Uke (Disse filene finnes også i mappen ~inf2100/e/e2/.)

INF Seminaroppgaver til uke 3

Løsningsforslag, inf101, våren 2001

INF Notater. Veronika Heimsbakk 10. juni 2012

Objektorientert Programmering Ekstraordinær eksamen 2014

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

IN1010 våren januar. Objektorientering i Java

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

UNIVERSITETET I OSLO

INF 1010, vår 2005 Løsningsforslag uke 11

Løsningsforslag Test 2

INF1010 våren 2018 tirsdag 23. januar

Å lese tall fra en fil, klassen Scanner

static int ant_steiner; //antall steiner static int teller2 = 0; //teller for printing til Thread^ murer; //murertråden

Avdeling for ingeniørutdanning Institutt for teknologi

Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java

INF1010. Grensesnittet Comparable<T>

IN Notat om I/O i Java

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

UNIVERSITETET I BERGEN Det matematisk-naturvitenskapelige fakultet

INF Notat om I/O i Java

Leksjon 7. Filer og unntak

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

INF1000 Metoder. Marit Nybakken 16. februar 2004

Del 3: Evaluere uttrykk

EKSAMEN. TILLATTE HJELPEMIDLER: Alle trykte og skrevne. INNFØRING MED PENN, evt. trykkblyant som gir gjennomslag

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

INF2100. Oppgaver 26. september til 1. oktober 2007

TDT4100 Objektorientert programmering

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

INF1010 våren Generalisering -spesialisering Gjenbruk av klasser. Ved arv. Klasse-hierarkier. Stein Gjessing.

Dagens tema: Kompilatorens struktur. De ulike modulene Prosjektet. Oppbyggingen Pakker i Java Avbrudd («exceptions») Enum-klasser i Java

Oversikt. INF1000 Uke 3. Repetisjon Program. Repetisjon Program. Litt repetisjon Program Variabler og Uttrykk Presedens Matematiske funksjoner

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

Videregående programmering 6

HØGSKOLEN I SØR-TRØNDELAG

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

INF1010 våren 2010 Torsdag 4. februar. Arv og subklasser del I. Emneoversikt subklasser (2 uker) Hva er en subklasse? Eksempel: Universitetsregister

Lese fra fil. INF1000 : Forelesning 5. Eksempel. De vanligste lesemetodene. Metoder:

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

3 emner i dag! INF1000 Uke 5. Objekter og pekere. null. Litt om objekter, pekere og null Filer og easyio Litt mer om tekster

INF1000: noen avsluttende ord

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

INF2100. Oppgaver 23. og 24. september 2010

INF2100. Oppgaver 9. oktober 2012 C 100 X 10

Eksamen. Objektorientert Programmering IGR 1372

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF2100. Oppgaver 6. og 11. oktober 2011 C 100 X 10

Løse reelle problemer

Oblig 4Hybelhus litt mer tips enn i oppgaven

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Modul Specifikation Skrevet af. Gruppen. Version 1.0

Inf 1000 høst 2005 Løsningsforslag ordinær eksamen

INF2100. Oppgaver uke 40 og

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Kapittel 7: Mer om arv

Forelesningsquiz. Forelesning inf Java 5. Sett dere to (eller tre) sammen og besvar de fire spørsmålene på utdelt ark. Tid: 15 min.

Uke 5, 27. januar Arv og subklasser del I. Stein Gjessing Institutt for informatikk

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk

INF1000-SIKT - Notat om I/O i Java

HØGSKOLEN I SØR-TRØNDELAG

Leksjon 7. Filer og unntak

JAVA Oppsummering for IS-102. Even Åby Larsen

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF2100. Oppgave 1. Oppgave 2 4. Løsningsforslag til oppgaver uke 40 og Se figur 1 på neste side.

UNIVERSITETET I OSLO

Kapittel 9: Sortering og søking Kort versjon

Spørsmål fra forrige forelesning. INF1000 Forelesning 7. Oppførselen til inword()/inint()/etc. Operator-presedens i Java

Java RMI. Introduksjon. Markus Foss Hans-Gunnar Vold

Oppgave 1 (Programtolkning) INF1000 Eksamen V06. Oppgave 1 (Programtolkning) Oppgave 1 (Programtolkning)

n / ($$ n 0$$/ $ " 1! <! ')! $ : ; $.+ $.5.+ .!)/!/ ) $.) 6$ 7$, $.5., $ 7$,

Kapittel 6: Arv. Redigert av: Khalid Azim Mughal

Algoritmer og datastrukturer Vedlegg A.4 Filbehandling på char-nivå

Dagens tema: Mer av det dere trenger til del 1

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

INF april 2017

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

Inf1000 (Uke 10) HashMap og ArrayList

Transkript:

Serveren import java.util.*; /* * Created on 23-08-2006 * @author rling public class Aktivitet implements Global Object[] boff; String[] buff; //ArrayList aktiviteter; //ArrayList egenskaber; Model model; String navn; Objekt objekt; Beskrivelse beskrivelse; * public Aktivitet(String navn, String krop, Objekt objekt, Model model) if(funk.od) System.out.println(" - " + navn + " : " + krop); this.model = model; this.navn = navn; this.objekt = objekt; String temp = krop; // Under aktiviteter int antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) if(objekt.aktiviteter == null) objekt.aktiviteter = new ArrayList();

for(int tal = 0; tal < antal; tal ++) String a = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; objekt.aktiviteter.add(new Aktivitet((buff = funk.tex(a, model.log10_max))[0], buff[1], objekt, model)); // Egenskaber antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) if(objekt.egenskaber == null) objekt.egenskaber = new ArrayList(); for(int tal = 0; tal < antal; tal ++) String e = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; objekt.egenskaber.add(new Egenskab((buff = funk.tex(e, model.log10_max))[0], (buff = funk.tex(buff[1], model.log10_max))[0], model)); // Beskrivelse temp = (buff = funk.tex(temp, model.log10_max))[0]; beskrivelse = new Beskrivelse((buff = funk.tex(temp, model.log10_max))[0], buff[1], objekt, model, 1); import java.util.*; /*

* Created on 23-08-2006 * @author rling public class Beskrivelse implements Global Model model; ArrayList beskrivelser; String tilknytning, navn, type; Object[] boff; String[] buff; Objekt objekt; // TODO Kun til debug, skla fjernes igen!! int level; public Beskrivelse(String type, String krop, Objekt objekt, Model model, int level) this.model = model; this.type = type; this.objekt = objekt; this.level = level; String temp = krop; // navn navn = (buff = funk.tex(krop, model.log10_max))[0]; temp = buff[1]; System.out.println("type = " + type + ", navn = " + navn); // Tilknytning tilknytning = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; if(funk.od) System.out.println(" - " + level + ". "+ navn + " (" + tilknytning + ")"); // Under beskrivelser int antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0)

beskrivelser = new ArrayList(); for(int tal = 0; tal < antal; tal ++) String b = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; beskrivelser.add(new Beskrivelse((buff = funk.tex(b, model.log10_max))[0], buff[1], objekt, model, level + 1)); import java.net.*; import java.io.*; import java.util.*; import com.sun.tools.javac.*; /* * Created on 21-08-2006 * @author rling public class Bruger extends Thread implements Global Socket stik = null; static int nummer = 1; int id = 0; String navn = "Anomym"; boolean logind = false; boolean afbyd = false; public PrintWriter ud; public BufferedReader ind; * public Bruger(Socket forbindelse)

super(); // TODO Auto-generated constructor stub stik = forbindelse; id = nummer++; /* (non-javadoc) * @see java.lang.runnable#run() public void run() // TODO Auto-generated method stub try ud = new PrintWriter(stik.getOutputStream(), true); ind = new BufferedReader(new InputStreamReader(stik.getInputStream())); lytter(); catch(exception e) public void lytter() String besked = ""; while(!besked.equals("f")) try besked = ind.readline(); if(besked == null) break; funk.log(funk.log + "net.log", funk.hent_tid() + " : Modtog " + besked + " fra " + navn); char pro = besked.charat(0); if(!besked.equals("f")) besked = besked.substring(1); switch(pro) case 'O': // Opret forbindelse logind(besked); break; case 'S': // Modtager model fra klient // oversaet modellen til java og gem den! // HUSK at opdater

modellisten! model(besked); break; case 'K': // Koer modellen //oversaet javafilen til class-fil og koer start metoden kor(besked); break; //case 'B': navn = besked; default : // Fejl!!! //System.out.println("D: modtog '" + besked + "'"); catch(exception e)e.printstacktrace(); luk(); public void kor(string m) // Gem psi som java filer Model model = (Model)Start.model.get(m); ArrayList a = gemjava(model); if(a.isempty()) // Oversaet fra java til Class filer! ArrayList b = over(model); if(b.isempty()) // Start simuleringen! //System.out.println("D: Alt oversat ok! :-)"); run(model); else String til = "EJava objekterne : "; for(iterator i = b.iterator(); i.hasnext();) til += i.next(); if(i.hasnext()) til += ", "; send(til + " kunne ikke oversaettes til class filer :-("); return;

else String til = "EJava-programmet kunne ikke gemme objekterne : "; for(iterator i = a.iterator(); i.hasnext();) til += i.next(); if(i.hasnext()) til += ", "; send(til + " paa serveren :-("); return; public void run(model model) Grund g = new Grund(this, model); g.start(); // uden parametrer! /*public void kor_java_program(string filnavn, String metodenavn) if(debug) System.out.println("### ---> nu starter jeg korselen!"); k = new Kor(this, start); k.kor(filnavn, metodenavn); k = null; // public ArrayList over(model model) ArrayList b = new ArrayList(); for(iterator i = model.objektliste.iterator(); i.hasnext();) Objekt o = (Objekt)i.next(); if(!overobjekt(o)) b.add(o.navn); return b; public ArrayList gemjava(model model)

ArrayList a = new ArrayList(); for(iterator i = model.objektliste.iterator(); i.hasnext();) Objekt o = (Objekt)i.next(); if(!gemobjekt(o)) a.add(o.navn); return a; public boolean gemobjekt(objekt o) try funk.gem_data(funk.dir + P(o.navn, o.model) + ".java", o.java); catch(exception e)return false; return true; public boolean overobjekt(objekt o) if(main.compile(new String[]funk.dir + P(o.navn, o.model) + ".java")!= 0) return false; return true; public void luk() try //System.out.println("D: Forsoeger at lukke for " + navn); send("efarvel " + navn + "!"); send("f"); ud.close(); ind.close(); stik.close(); Start.bruger.remove(navn); funk.log(funk.log + "bruger.log", funk.hent_tid() + " : " + navn + " logget af uden problemer :-)"); catch(exception e) funk.log(funk.log + "bruger.log",

funk.hent_tid() + " : " + navn + " logget af med problemet : " + e); public void logind(string data) navn = data; if(start.bruger.containskey(navn)) send("eder er en anden bruger paa nettet lige nu, som bruger navnet " + navn); send("e" + navn + " fik IKKE forbindelse til serveren :-("); luk(); //send("f"); else Start.bruger.put(navn, this); logind = true; send("evelkommen til server version " + version); send("edu vil blive kaldt " + navn + "(" + id + ")"); send(funk.liste()); public void model(string data) Model temp = new Model(data, this); if(temp.krop == null) Model m = (Model)Start.model.get(temp.navn); if(!m.hvem.equals(navn)) send("e" + navn + " er ikke ejer af " + temp.navn + " (kun ejeren maa overskrive sin model)."); send("emodellen blev IKKE gemt!"); return; if(overset(temp)) Start.model.put(temp.navn, temp); send("e" + temp.navn + " gemt!"); send(funk.liste()); else send("e" + temp.navn + " kunne ikke oversaettes til java!");

public boolean overset(model model) if(model == null) send("eder er ingen model!"); return false; if(model.objektliste == null) send("emodellen er tom!"); return false; for(iterator i = model.objektliste.iterator(); i.hasnext();) overset(((objekt)i.next())); return true; public void overset(objekt objekt) String k = "public class " + P(objekt.navn, objekt.model) + "\n"; // Egenskaber k += "\n public static Grund grund;"; if(objekt.egenskaber!= null) for(iterator i = objekt.egenskaber.iterator(); i.hasnext();) k += egenskab((egenskab)i.next()); /* Den tome Konstruktoer!! k += "\n\n public " + P(objekt.navn, objekt.model) + "()\n "; k += "";// // Konstruktoer k += "\n\n public " + P(objekt.navn, objekt.model) + "(Grund grund)\n "; k += "\n this.grund = grund;\n "; // Aktiviteter

if(objekt.aktiviteter!= null) for(iterator i = objekt.aktiviteter.iterator(); i.hasnext();) k += aktivitet((aktivitet)i.next()); k += "\n\n"; System.out.println("D:\n" + k); objekt.java = k; public String egenskab(egenskab e) if(funk.kommatal(e.verdi)) return "\n public static double " + e.navn + " = Double.valueOf(\"" + e.verdi + "\").doublevalue();"; if(funk.heltal(e.verdi)) return "\n public static long " + e.navn + " = Long.valueOf(\"" + e.verdi + "\").longvalue();"; System.out.println("vaerdi = " + e.verdi); return "\n public static String " + e.navn + " = \"" + e.verdi + "\";"; public String aktivitet(aktivitet a) String retur = "\n\n public static void "; retur += /*P() + a.navn + "()\n \n"; retur += " " + beskrivelse(a.beskrivelse); retur += "\n "; public String beskrivelse(beskrivelse b) //String retur = "/n "; return overset_k(b); //retur += // public String overset_k(beskrivelse g) String retur = ""; System.out.println("D: type = " + g.type);

if(g.type.equals("a") g.type.equals("x")) g.navn = g.navn.substring(1); if(g.navn.equals("udskriv V")) retur += "grund.send("; retur += overset_v(g.beskrivelser.get(0)); retur += ");"; if(g.navn.equals("e bliver til V")) retur += overset_e(g.beskrivelser.get(0)); retur += " = " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e vokser med V")) retur += overset_e(g.beskrivelser.get(0)); retur += " += " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e aftager med V")) retur += overset_e(g.beskrivelser.get(0)); retur += " -= " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e bliver V gange st rre")) retur += overset_e(g.beskrivelser.get(0)); retur += " *= " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e bliver V gange mindre")) retur += overset_e(g.beskrivelser.get(0)); retur += " /= " + overset_v(g.beskrivelser.get(1)) + ";";

if(g.navn.equals("hvis B sâ A")) retur += "if(" + overset_b(g.beskrivelser.get(0)) + ")"; retur += "" + g_check() + overset_a(g.beskrivelser.get(1)) + ""; if(g.navn.equals("gentag A indtil B")) retur += "while(!(" + overset_b(g.beskrivelser.get(1)) + "))"; retur += "" + overset_a(g.beskrivelser.get(0)) + ""; if(g.navn.equals("udf r A")) retur += overset_a(g.beskrivelser.get(0)); if(g.navn.equals("a, samt X")) retur += overset_a(g.beskrivelser.get(0)) + "\n "; retur += overset_a(g.beskrivelser.get(1)); if(g.navn.equals("a")) retur += overset_a(g.beskrivelser.get(0)); //System.out.println("Type = " + type); // En aktivitet! if(g.tilknytning!= null) retur += g_check() + P(g.tilknytning, g.model) + "."; retur += g.navn + "();";

public String g_check() return "if(grund.check()) return; "; public String overset_a(object o) return beskrivelse((beskrivelse)o); // bare K /* String retur = ""; retur += "Navn = " + b.navn; if(b.beskrivelser!= null) retur += ", storrelse" + b.beskrivelser.size(); public String overset_b(object o) Beskrivelse b = (Beskrivelse)o; String retur = ""; String s = b.navn.substring(1); if(s.equals("e lig med V")) retur += overset_e(b.beskrivelser.get(0)); retur += " == " + overset_v(b.beskrivelser.get(1)); if(s.equals("e st rre end V")) retur += overset_e(b.beskrivelser.get(0)); retur += " > " + overset_v(b.beskrivelser.get(1)); if(s.equals("e mindre end V")) retur += overset_e(b.beskrivelser.get(0)); retur += " < " + overset_v(b.beskrivelser.get(1));

if(s.equals("b og B")) retur += "(" + overset_b(b.beskrivelser.get(0)); retur += " && " + overset_b(b.beskrivelser.get(1)) + ")"; if(s.equals("b eller B")) retur += "(" + overset_b(b.beskrivelser.get(0)); retur += " " + overset_b(b.beskrivelser.get(1)) +")"; if(s.equals("ikke B")) retur += "!(" + overset_b(b.beskrivelser.get(0)) + ")"; //??? public String overset_e(object o) Beskrivelse b = (Beskrivelse)o; String retur = ""; if(!b.tilknytning.equals("")) retur += P(b.tilknytning, b.model) + "."; retur += b.navn; public String overset_v(object o) Beskrivelse b = (Beskrivelse)o; String retur =""; if(b.tilknytning!= null)

if(!b.tilknytning.equals("")) retur += P(b.tilknytning, b.model) + "." + b.navn; else if(funk.kommatal(b.navn) funk.heltal(b.navn)) retur += b.navn; else retur += "\"" + b.navn + "\""; else if(funk.kommatal(b.navn) funk.heltal(b.navn)) retur += b.navn; else retur += "\"" + b.navn + "\""; public boolean find(arraylist liste, String navn) if(liste == null) return false; for(iterator i = liste.iterator(); i.hasnext();) Object o = i.next(); if(o instanceof Egenskab && ((Egenskab)o).navn.equals(navn)) return true; return false; // Tillaeg til navn, saa filerne bliver naemmere at finde, rette og slette. public String P(String navn, Model model) String r = model.navn.substring(0, 1).toUpperCase() + model.navn.substring(1); return r + "_" + navn; public String p(string navn, Model model) String r = model.navn.substring(0, 1).toLowerCase() + model.navn.substring(1); return r + "_" + navn; public void send(string tekst)

ud.println(tekst); funk.log(funk.log + "net.log", funk.hent_tid() + " : sende " + tekst + " til " + navn); import java.net.*; import java.io.*; import java.util.*; import com.sun.tools.javac.*; /* * Created on 21-08-2006 * @author rling public class Bruger extends Thread implements Global Socket stik = null; static int nummer = 1; int id = 0; String navn = "Anomym"; boolean logind = false; boolean afbyd = false; public PrintWriter ud; public BufferedReader ind; * public Bruger(Socket forbindelse) super(); // TODO Auto-generated constructor stub stik = forbindelse; id = nummer++; /* (non-javadoc)

* @see java.lang.runnable#run() public void run() // TODO Auto-generated method stub try ud = new PrintWriter(stik.getOutputStream(), true); ind = new BufferedReader(new InputStreamReader(stik.getInputStream())); lytter(); catch(exception e) public void lytter() String besked = ""; while(!besked.equals("f")) try besked = ind.readline(); if(besked == null) break; funk.log(funk.log + "net.log", funk.hent_tid() + " : Modtog " + besked + " fra " + navn); char pro = besked.charat(0); if(!besked.equals("f")) besked = besked.substring(1); switch(pro) case 'O': // Opret forbindelse logind(besked); break; case 'S': // Modtager model fra klient // oversaet modellen til java og gem den! // HUSK at opdater modellisten! model(besked); break; case 'K': // Koer modellen //oversaet javafilen til class-fil og koer start metoden kor(besked);

break; //case 'B': navn = besked; default : // Fejl!!! //System.out.println("D: modtog '" + besked + "'"); catch(exception e)e.printstacktrace(); luk(); public void kor(string m) // Gem psi som java filer Model model = (Model)Start.model.get(m); ArrayList a = gemjava(model); if(a.isempty()) // Oversaet fra java til Class filer! ArrayList b = over(model); if(b.isempty()) // Start simuleringen! //System.out.println("D: Alt oversat ok! :-)"); run(model); else String til = "EJava objekterne : "; for(iterator i = b.iterator(); i.hasnext();) til += i.next(); if(i.hasnext()) til += ", "; send(til + " kunne ikke oversaettes til class filer :-("); return; else String til = "EJava-programmet kunne ikke gemme objekterne : "; for(iterator i = a.iterator(); i.hasnext();)

til += i.next(); if(i.hasnext()) til += ", "; send(til + " paa serveren :-("); return; public void run(model model) Grund g = new Grund(this, model); g.start(); // uden parametrer! /*public void kor_java_program(string filnavn, String metodenavn) if(debug) System.out.println("### ---> nu starter jeg korselen!"); k = new Kor(this, start); k.kor(filnavn, metodenavn); k = null; // public ArrayList over(model model) ArrayList b = new ArrayList(); for(iterator i = model.objektliste.iterator(); i.hasnext();) Objekt o = (Objekt)i.next(); if(!overobjekt(o)) b.add(o.navn); return b; public ArrayList gemjava(model model) ArrayList a = new ArrayList(); for(iterator i = model.objektliste.iterator(); i.hasnext();) Objekt o = (Objekt)i.next(); if(!gemobjekt(o)) a.add(o.navn);

return a; public boolean gemobjekt(objekt o) try funk.gem_data(funk.dir + P(o.navn, o.model) + ".java", o.java); catch(exception e)return false; return true; public boolean overobjekt(objekt o) if(main.compile(new String[]funk.dir + P(o.navn, o.model) + ".java")!= 0) return false; return true; public void luk() try //System.out.println("D: Forsoeger at lukke for " + navn); send("efarvel " + navn + "!"); send("f"); ud.close(); ind.close(); stik.close(); Start.bruger.remove(navn); funk.log(funk.log + "bruger.log", funk.hent_tid() + " : " + navn + " logget af uden problemer :-)"); catch(exception e) funk.log(funk.log + "bruger.log", funk.hent_tid() + " : " + navn + " logget af med problemet : " + e); public void logind(string data)

navn = data; if(start.bruger.containskey(navn)) send("eder er en anden bruger paa nettet lige nu, som bruger navnet " + navn); send("e" + navn + " fik IKKE forbindelse til serveren :-("); luk(); //send("f"); else Start.bruger.put(navn, this); logind = true; send("evelkommen til server version " + version); send("edu vil blive kaldt " + navn + "(" + id + ")"); send(funk.liste()); public void model(string data) Model temp = new Model(data, this); if(temp.krop == null) Model m = (Model)Start.model.get(temp.navn); if(!m.hvem.equals(navn)) send("e" + navn + " er ikke ejer af " + temp.navn + " (kun ejeren maa overskrive sin model)."); send("emodellen blev IKKE gemt!"); return; if(overset(temp)) Start.model.put(temp.navn, temp); send("e" + temp.navn + " gemt!"); send(funk.liste()); else send("e" + temp.navn + " kunne ikke oversaettes til java!"); public boolean overset(model model) if(model == null) send("eder er ingen model!"); return false;

if(model.objektliste == null) send("emodellen er tom!"); return false; for(iterator i = model.objektliste.iterator(); i.hasnext();) overset(((objekt)i.next())); return true; public void overset(objekt objekt) String k = "public class " + P(objekt.navn, objekt.model) + "\n"; // Egenskaber k += "\n public static Grund grund;"; if(objekt.egenskaber!= null) for(iterator i = objekt.egenskaber.iterator(); i.hasnext();) k += egenskab((egenskab)i.next()); /* Den tome Konstruktoer!! k += "\n\n public " + P(objekt.navn, objekt.model) + "()\n "; k += "";// // Konstruktoer k += "\n\n public " + P(objekt.navn, objekt.model) + "(Grund grund)\n "; k += "\n this.grund = grund;\n "; // Aktiviteter if(objekt.aktiviteter!= null) for(iterator i = objekt.aktiviteter.iterator(); i.hasnext();) k += aktivitet((aktivitet)i.next());

k += "\n\n"; System.out.println("D:\n" + k); objekt.java = k; public String egenskab(egenskab e) if(funk.kommatal(e.verdi)) return "\n public static double " + e.navn + " = Double.valueOf(\"" + e.verdi + "\").doublevalue();"; if(funk.heltal(e.verdi)) return "\n public static long " + e.navn + " = Long.valueOf(\"" + e.verdi + "\").longvalue();"; System.out.println("vaerdi = " + e.verdi); return "\n public static String " + e.navn + " = \"" + e.verdi + "\";"; public String aktivitet(aktivitet a) String retur = "\n\n public static void "; retur += /*P() + a.navn + "()\n \n"; retur += " " + beskrivelse(a.beskrivelse); retur += "\n "; public String beskrivelse(beskrivelse b) //String retur = "/n "; return overset_k(b); //retur += // public String overset_k(beskrivelse g) String retur = ""; System.out.println("D: type = " + g.type); if(g.type.equals("a") g.type.equals("x")) g.navn = g.navn.substring(1); if(g.navn.equals("udskriv V")) retur += "grund.send("; retur += overset_v(g.beskrivelser.get(0)); retur += ");";

if(g.navn.equals("e bliver til V")) retur += overset_e(g.beskrivelser.get(0)); retur += " = " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e vokser med V")) retur += overset_e(g.beskrivelser.get(0)); retur += " += " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e aftager med V")) retur += overset_e(g.beskrivelser.get(0)); retur += " -= " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e bliver V gange st rre")) retur += overset_e(g.beskrivelser.get(0)); retur += " *= " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("e bliver V gange mindre")) retur += overset_e(g.beskrivelser.get(0)); retur += " /= " + overset_v(g.beskrivelser.get(1)) + ";"; if(g.navn.equals("hvis B sâ A")) retur += "if(" + overset_b(g.beskrivelser.get(0)) + ")";

retur += "" + g_check() + overset_a(g.beskrivelser.get(1)) + ""; if(g.navn.equals("gentag A indtil B")) retur += "while(!(" + overset_b(g.beskrivelser.get(1)) + "))"; retur += "" + overset_a(g.beskrivelser.get(0)) + ""; if(g.navn.equals("udf r A")) retur += overset_a(g.beskrivelser.get(0)); if(g.navn.equals("a, samt X")) retur += overset_a(g.beskrivelser.get(0)) + "\n "; retur += overset_a(g.beskrivelser.get(1)); if(g.navn.equals("a")) retur += overset_a(g.beskrivelser.get(0)); //System.out.println("Type = " + type); // En aktivitet! if(g.tilknytning!= null) retur += g_check() + P(g.tilknytning, g.model) + "."; retur += g.navn + "();"; public String g_check() return "if(grund.check()) return; ";

public String overset_a(object o) return beskrivelse((beskrivelse)o); // bare K /* String retur = ""; retur += "Navn = " + b.navn; if(b.beskrivelser!= null) retur += ", storrelse" + b.beskrivelser.size(); public String overset_b(object o) Beskrivelse b = (Beskrivelse)o; String retur = ""; String s = b.navn.substring(1); if(s.equals("e lig med V")) retur += overset_e(b.beskrivelser.get(0)); retur += " == " + overset_v(b.beskrivelser.get(1)); if(s.equals("e st rre end V")) retur += overset_e(b.beskrivelser.get(0)); retur += " > " + overset_v(b.beskrivelser.get(1)); if(s.equals("e mindre end V")) retur += overset_e(b.beskrivelser.get(0)); retur += " < " + overset_v(b.beskrivelser.get(1)); if(s.equals("b og B")) retur += "(" + overset_b(b.beskrivelser.get(0));

retur += " && " + overset_b(b.beskrivelser.get(1)) + ")"; if(s.equals("b eller B")) retur += "(" + overset_b(b.beskrivelser.get(0)); retur += " " + overset_b(b.beskrivelser.get(1)) +")"; if(s.equals("ikke B")) retur += "!(" + overset_b(b.beskrivelser.get(0)) + ")"; //??? public String overset_e(object o) Beskrivelse b = (Beskrivelse)o; String retur = ""; if(!b.tilknytning.equals("")) retur += P(b.tilknytning, b.model) + "."; retur += b.navn; public String overset_v(object o) Beskrivelse b = (Beskrivelse)o; String retur =""; if(b.tilknytning!= null) if(!b.tilknytning.equals("")) retur += P(b.tilknytning, b.model) + "." + b.navn; else if(funk.kommatal(b.navn) funk.heltal(b.navn)) retur += b.navn; else retur += "\"" + b.navn + "\"";

else if(funk.kommatal(b.navn) funk.heltal(b.navn)) retur += b.navn; else retur += "\"" + b.navn + "\""; public boolean find(arraylist liste, String navn) if(liste == null) return false; for(iterator i = liste.iterator(); i.hasnext();) Object o = i.next(); if(o instanceof Egenskab && ((Egenskab)o).navn.equals(navn)) return true; return false; // Tillaeg til navn, saa filerne bliver naemmere at finde, rette og slette. public String P(String navn, Model model) String r = model.navn.substring(0, 1).toUpperCase() + model.navn.substring(1); return r + "_" + navn; public String p(string navn, Model model) String r = model.navn.substring(0, 1).toLowerCase() + model.navn.substring(1); return r + "_" + navn; public void send(string tekst) ud.println(tekst); funk.log(funk.log + "net.log", funk.hent_tid() + " : sende " + tekst + " til " + navn);

/* * Created on 23-08-2006 * @author rling public class Egenskab implements Global Model model; String navn; String verdi; public Egenskab(String navn, String verdi, Model model) if(funk.od) System.out.println(" - " + navn + " : " + verdi); this.model = model; this.navn = navn; this.verdi = verdi; import java.util.*; import java.io.*; import java.text.*; /* * Created on 21-08-2006 * @author rling public class Funktion Start start; int log10_max = 4; String ser = "server/";

String dir = ""; //ser + "klasser/"; String log = ser + "logbog/"; boolean od = false; // Oversaettelses debuging! * public Funktion() super(); // TODO Auto-generated constructor stub * Oversaetter specielt formateret tekst til tekst! * F.eks. bliver "05Model" til "Model" * @param tekst * @return public String tex(string tekst) int tal = tal(tekst.substring(0, 2)); return tekst.substring(2, tal + 2); * Oversaetter formateret tekst til "normal" tekst og afkorter teksten, saa den passer igen! * F.eks. bliver "0006ObjektBlaBlaBla", 4 til "Objekt", "BlaBlaBla" * @param tekst * @param size * @return public String[] tex(string tekst, int size) int tal = tal(tekst.substring(0, size)); String[] retur = tekst.substring(size, tal + size), tekst.substring(tal + size); * Oversaetter tekst til tal. * F.eks. bliver "0000567" til 567 * @param tal

* @return public int tal(string tal) try return Integer.decode(nulfri(tal)).intValue(); catch(exception e)e.printstacktrace(); return -1; * Oversaetter tal... * F.eks. bliver "0008Objekt 1BlaBlaBla", 4 til 8, "Objekt 1BlaBlaBla" * @param tal * @param size * @return public Object[] tal(string tal, int size) Object[] o = new Integer(tal(tal.substring(0, size))), tal.substring(size); return o; public int tal(object tal) return ((Integer)tal).intValue(); * Fjerner nuller fra tekster. * F.eks. bliver "0000567" til "567" * @param tekst * @return public String nulfri(string tekst) while(tekst.startswith("0") && tekst.length() > 1) tekst = tekst.substring(1); return tekst;

* Klargoere model listen til at blive sendt til brugeren. * @return public String liste() String temp = "L" + fyld(log10_max, 2) + fyld(start.model.size(), log10_max); for(iterator i = Start.model.keySet().iterator(); i.hasnext();) temp += format((string)i.next()); return temp; * Formater teksten. * F.eks. bliver "Objekt 1" til "0008Objekt 1" * @param tekst * @return public String format(string tekst) return fyld(tekst.length(), log10_max) + tekst; * Laver formaterede tal. * F.eks. bliver 567, 8 til "00000567" * @param tal * @param size * @return public String fyld(int tal, int size) String temp = tal + ""; while(temp.length() < size) temp = "0" + temp; return temp;

* Sender tekst til alle bruger * @param tekst public void send_all(string tekst) for(iterator i = Start.bruger.keySet().iterator(); i.hasnext();) ((Bruger)i.next()).send(tekst); public boolean heltal(string tekst) try Long.valueOf(tekst); return true; catch(exception e)return false; public boolean kommatal(string tekst) try Double.valueOf(tekst); if(tekst.indexof(".") == -1) return false; return true; catch(exception e)return false; public void gem_data(string navn, String data) throws Exception FileWriter skriver = new FileWriter(navn); skriver.write(data); skriver.close(); public String hent_data(string navn) try String s, r = ""; BufferedReader leser = new

BufferedReader(new InputStreamReader(new FileInputStream(navn))); trywhile((s = leser.readline())!= null)r+="\n" + s; catch(eofexception e) leser.close(); return r; leser.close(); return r; catch(exception e) return "FEJL!"; public boolean log(string navn, String data) try String g = ""; String dir = ""; // Speciel mappe til logboeger if(new File(dir + navn).exists()) g = hent_data(navn); //if(debugt) System.out.println("Henter data! " +g); g += (data + "\n "); gem_data(navn, g); //if(debugt) System.out.println("gemte " + g); catch(exception e)return false; return true; public String hent_tid() DateFormat format = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.GERMAN); return format.format(new Date());

/* * Created on 21-08-2006 * @author rling public interface Global Funktion funk = new Funktion(); String version = "0,003 Beta"; import java.lang.reflect.*; import java.io.*; import java.security.*; /* * Created on 25-08-2006 * @author rling public class Grund extends Thread implements Global Bruger bruger; Model model; public Grund(Bruger bruger, Model model) this.bruger = bruger; this.model = model; // classload til at lave klasserne med :-) public void run() try funk.log(funk.log + "overset.log", "");

RlingsLoader hent = new RlingsLoader(); Class klasse = hent.load(funk.dir + bruger.p(model.starttil, model)); Class[] klasseparameter_1 = this.getclass(); Object[] objektparameter_1 = this; Constructor konstruktoer = klasse.getconstructor(klasseparameter_1); Object instans = konstruktoer.newinstance(objektparameter_1); Class[] klasseparameter_2 = ; Object[] objektparameter_2 = ; funk.log(funk.log + "overset.log", "\nklassen hedder " + instans.getclass().getname()); Method metode = klasse.getdeclaredmethod(model.startaktivitet, klasseparameter_2); funk.log(funk.log + "overset.log", "\nmetoden hedder " + metode); // Gogo metode.invoke(instans, objektparameter_2); catch(exception e)e.printstacktrace(); public void send(string tekst) bruger.send("e" + tekst); // Skallaves om til DB public void send(double tal) bruger.send("e" + tal); // Skallaves om til DB public void send(int tal) bruger.send("e" + tal); public boolean check()

return bruger.afbyd; import java.util.*; /* * Created on 21-08-2006 * @author rling public class Model implements Global String navn, psi, krop, hvem, starttil; String startaktivitet = ""; int size; String[] buff; Object[] boff; ArrayList objektliste; Bruger ejer; int log10_max = 0; * public Model(String psi, Bruger ejer) // Simple data this.psi = psi; this.ejer = ejer; hvem = ejer.navn; log10_max = funk.tal(psi.substring(0, 2)); String temp = psi.substring(2); startaktivitet = (buff = funk.tex(temp, log10_max))[0]; temp = buff[1]; //* starttil = (buff = funk.tex(temp, log10_max))[0]; temp = buff[1];

// size = ((buff = funk.tex(temp, log10_max))[0]).length(); temp = temp.substring(log10_max); navn = (buff = funk.tex(temp, log10_max))[0]; // Findes iforvejen? if(start.model.containskey(navn)) if(!((model)start.model.get(navn)).ejer.navn.equals(hvem)) return; // Objekterne! krop = buff[1]; if(!krop.equals("0000") && krop.length() > 4) objektliste = new ArrayList(); int antal = funk.tal((boff = funk.tal(krop, log10_max))[0]); temp = (String)boff[1]; for(int tal = 0; tal < antal; tal ++) objektliste.add(new Objekt((buff = funk.tex(temp, log10_max))[0], this)); temp = buff[1]; import java.util.*; /* * Created on 22-08-2006 * @author rling public class Objekt implements Global

String navn, temp, krop, java; String[] buff; Object[] boff; Model model; // ArrayList objekter; ArrayList aktiviteter; ArrayList egenskaber; * public Objekt(String krop, Model model) this.model = model; // De simple data navn = (buff = funk.tex(krop, model.log10_max))[0]; krop = (temp = buff[1]); if(funk.od) System.out.println(navn); // Under objekter int antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) for(int tal = 0; tal < antal; tal ++) model.objektliste.add(new Objekt((buff = funk.tex(temp, model.log10_max))[0], model)); temp = buff[1]; // Aktiviteter antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) aktiviteter = new ArrayList(); for(int tal = 0; tal < antal; tal ++) String a = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1];

aktiviteter.add(new Aktivitet((buff = funk.tex(a, model.log10_max))[0], buff[1], this, model)); // Egenskaber antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) egenskaber = new ArrayList(); for(int tal = 0; tal < antal; tal ++) String e = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; egenskaber.add(new Egenskab((buff = funk.tex(e, model.log10_max))[0], (buff = funk.tex(buff[1], model.log10_max))[0], model)); import java.util.*; /* * Created on 22-08-2006 * @author rling public class Objekt implements Global String navn, temp, krop, java; String[] buff; Object[] boff; Model model; // ArrayList objekter; ArrayList aktiviteter;

ArrayList egenskaber; * public Objekt(String krop, Model model) this.model = model; // De simple data navn = (buff = funk.tex(krop, model.log10_max))[0]; krop = (temp = buff[1]); if(funk.od) System.out.println(navn); // Under objekter int antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) for(int tal = 0; tal < antal; tal ++) model.objektliste.add(new Objekt((buff = funk.tex(temp, model.log10_max))[0], model)); temp = buff[1]; // Aktiviteter antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) aktiviteter = new ArrayList(); for(int tal = 0; tal < antal; tal ++) String a = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; aktiviteter.add(new Aktivitet((buff = funk.tex(a, model.log10_max))[0], buff[1], this, model)); // Egenskaber

antal = funk.tal((boff = funk.tal(temp, model.log10_max))[0]); temp = (String)boff[1]; if(antal > 0) egenskaber = new ArrayList(); for(int tal = 0; tal < antal; tal ++) String e = (buff = funk.tex(temp, model.log10_max))[0]; temp = buff[1]; egenskaber.add(new Egenskab((buff = funk.tex(e, model.log10_max))[0], (buff = funk.tex(buff[1], model.log10_max))[0], model)); import java.io.*; /* * Created on 27-08-2006 * @author rling public class RlingsLoader extends ClassLoader * @param arg0 public RlingsLoader(ClassLoader arg0) super(arg0); // TODO Auto-generated constructor stub *

public RlingsLoader() super(); // TODO Auto-generated constructor stub public Class load(string navn) try byte[] buf = byteforclass(navn); return defineclass(navn, buf, 0, buf.length); catch(exception e)return null; public byte[] byteforclass(string name) throws IOException, ClassNotFoundException FileInputStream in = streamfor(name + ".class"); int length = in.available(); if(length == 0) throw new ClassNotFoundException(name); byte[] buf = new byte[length]; in.read(buf); return buf; public FileInputStream streamfor(string name) FileInputStream r = null; tryr = new FileInputStream(name); catch(exception e) return r; import java.net.*; import java.util.*; /* * Created on 21-08-2006

* @author rling public class Start implements Global static HashMap bruger = new HashMap(); static HashMap model = new HashMap(); * public Start() super(); // TODO Auto-generated constructor stub funk.start = this; public static void main(string[] args) // set args! if(!funk.log(funk.log + "server.log", funk.hent_tid() + " : Server startet")) System.err.println("Serveren kan ikke lave log fil!"); ServerSocket stik; try stik = new ServerSocket(4444); System.out.println("Lytter nu!"); while(true) Bruger b = new Bruger(stik.accept()); b.start(); bruger.put(b.navn, b); funk.log(funk.log + "server.log", funk.hent_tid() + " : Bruger " + b.navn + " har logget paa med id-nummer " + b.id + " fra " + b.stik.getinetaddress() + "(" + b.stik.getlocaladdress() + ")"); catch(exception e) funk.log(funk.log + "server.log", funk.hent_tid() + " : Server i udu :-("); e.printstacktrace();

\endverbartim