Projekt

Obecné

Profil

Stáhnout (3.97 KB) Statistiky
| Větev: | Tag: | Revize:
1 81ff7da4 @havlijan17
import java.io.BufferedWriter;
2 03a2d08f Michal Horký
import java.io.File;
3 e8ba39e7 horkmi
import java.io.FileDescriptor;
4
import java.io.FileOutputStream;
5 81ff7da4 @havlijan17
import java.io.FileWriter;
6 03a2d08f Michal Horký
import java.io.IOException;
7 e8ba39e7 horkmi
import java.io.PrintStream;
8
import java.util.HashMap;
9 03a2d08f Michal Horký
import java.util.List;
10 49fd8648 Michal Horký
import java.util.concurrent.Semaphore;
11
import java.util.concurrent.atomic.AtomicBoolean;
12
import java.util.concurrent.atomic.AtomicReference;
13 a5d16f0a horkmi
import java.util.concurrent.locks.Lock;
14
import java.util.concurrent.locks.ReentrantLock;
15 03a2d08f Michal Horký
16
import jdeserialize.content;
17
import jdeserialize.jdeserialize;
18 7e0b699a horkmi
import io.Database.DB_Messenger;
19
import io.Database;
20 49fd8648 Michal Horký
import io.FileWorker;
21
22 03a2d08f Michal Horký
public class Converter extends Thread {
23 81ff7da4 @havlijan17
24
	private IConversionResults ui;
25 49fd8648 Michal Horký
	private AtomicBoolean active;
26 81ff7da4 @havlijan17
27 a5d16f0a horkmi
	// P-K without E semaphore.
28
	private Lock entryLock;
29 49fd8648 Michal Horký
	private Semaphore inputAvailable;
30 81ff7da4 @havlijan17
31 5ae26965 horkmi
	// Input.
32 a5d16f0a horkmi
	private File inputFile;
33 7e0b699a horkmi
	private DB_Messenger query;
34 81ff7da4 @havlijan17
35 49fd8648 Michal Horký
	public Converter(IConversionResults ui) {
36
		this.ui = ui;
37
		active = new AtomicBoolean(true);
38 a5d16f0a horkmi
		entryLock = new ReentrantLock();
39 49fd8648 Michal Horký
		inputAvailable = new Semaphore(0);
40
	}
41 81ff7da4 @havlijan17
42 49fd8648 Michal Horký
	public void end() {
43
		active.set(false);
44 7e0b699a horkmi
		setInput(null, null);
45 49fd8648 Michal Horký
	}
46 03a2d08f Michal Horký
	
47 7e0b699a horkmi
	public void setInput(File inputFile, DB_Messenger query) {
48 a5d16f0a horkmi
		entryLock.lock();
49
		this.inputFile = inputFile;
50 7e0b699a horkmi
		this.query = query;
51 a5d16f0a horkmi
		entryLock.unlock();
52 81ff7da4 @havlijan17
53 a5d16f0a horkmi
		if (!inputAvailable.tryAcquire())
54
			inputAvailable.release(); // MAX VALUE = 1!
55
	}
56
	
57 7e0b699a horkmi
	public boolean getInput(AtomicReference<File> inputFile, AtomicReference<DB_Messenger> query) {
58 a5d16f0a horkmi
		try {
59
			inputAvailable.acquire();
60
		} catch (InterruptedException e) {
61
			return false;
62
		}
63 81ff7da4 @havlijan17
64 a5d16f0a horkmi
		entryLock.lock();
65
		inputFile.set(this.inputFile);
66 7e0b699a horkmi
		query.set(this.query);
67 5ae26965 horkmi
		
68 a5d16f0a horkmi
		this.inputFile = null;
69 7e0b699a horkmi
		this.query = null;
70 a5d16f0a horkmi
		entryLock.unlock();
71 81ff7da4 @havlijan17
72 7e0b699a horkmi
		return inputFile.get() != null || query.get() != null;
73 03a2d08f Michal Horký
	}
74 81ff7da4 @havlijan17
75 03a2d08f Michal Horký
	@Override
76
	public void run() {
77
		super.run();
78 49fd8648 Michal Horký
		while (active.get()) {
79 a5d16f0a horkmi
			AtomicReference<File> inputFile = new AtomicReference<File>();
80 7e0b699a horkmi
			AtomicReference<DB_Messenger> query = new AtomicReference<DB_Messenger>();
81 81ff7da4 @havlijan17
82 7e0b699a horkmi
			if (!getInput(inputFile, query)) {
83 49fd8648 Michal Horký
				continue;
84
			}
85 81ff7da4 @havlijan17
86 7e0b699a horkmi
			byte array[] = inputFile.get() != null ? getBytes(inputFile.get()) : getBytes(query.get());
87 5ae26965 horkmi
			StringBuilder html = new StringBuilder();
88
			StringBuilder json = new StringBuilder();
89
			
90
			try {
91
				// Redirectovany system.out do null streamu. Mozno redirect do souboru
92
				System.setOut(FileWorker.createRedirectStream());
93
				convert(array, html, json);
94
			} catch (Exception e) {
95
				json.setLength(0);
96
				html.setLength(0);
97
			} finally {
98
				System.setOut(new PrintStream(new FileOutputStream(FileDescriptor.out)));
99 a5d16f0a horkmi
			}
100 5ae26965 horkmi
101
			//test file output
102
			try {
103
				BufferedWriter writer = new BufferedWriter(new FileWriter("html.txt"));
104
				writer.write(html.toString().replace("<br/>", "\n")); // TODO pridan replace pro odsazovani - lepsi orientace v souboru.
105
				writer.close();
106
107
				BufferedWriter writer2 = new BufferedWriter(new FileWriter("json.txt"));
108
				writer2.write(json.toString());
109
				writer2.close();
110
			} catch (IOException e) {
111
				// TODO Auto-generated catch block
112
				e.printStackTrace();
113
			}
114
			//test file output
115
			
116 98da6ab0 horkmi
			ui.completed(html.toString(), json.toString(), array == null ? null : new String(array));
117 49fd8648 Michal Horký
		}
118
	}
119 81ff7da4 @havlijan17
120 5ae26965 horkmi
	private byte[] getBytes(File input) {
121 49fd8648 Michal Horký
		byte array[];
122
		try {
123
			array = FileWorker.loadByteArray(input);
124
		} catch (IOException e) {
125
			ui.loadingInputFileError();
126 5ae26965 horkmi
			return null;
127 49fd8648 Michal Horký
		}
128 5ae26965 horkmi
		return array;
129 a5d16f0a horkmi
	}
130 5ae26965 horkmi
	
131 7e0b699a horkmi
	private byte[] getBytes(DB_Messenger query) {
132
		return Database.getBlobBytes(query);
133
	}
134
135 a5d16f0a horkmi
	private void convert(byte[] buffer, StringBuilder html, StringBuilder json) throws Exception {
136 49fd8648 Michal Horký
		jdeserialize deserializer = new jdeserialize(buffer);
137 a5d16f0a horkmi
138 49fd8648 Michal Horký
		// gets the "contents" into an array - returnes the deserialization of all
139 81ff7da4 @havlijan17
		// 'writes' into serialized object via objectOutputStream
140
		List<content> cntnts = deserializer.getContent();
141
142
		for (content cnt : cntnts) {
143
			if (cnt != null) {
144
				// Parametrizovany toJson pomoci dictionary
145
				// Ciste HTML / Cisty JSON
146 07cf72bd @havlijan17
				json.append(cnt.toJson("", null, false));
147
				html.append(cnt.toJson("", null, false));
148 e3d5fc53 @havlijan17
			}
149 03a2d08f Michal Horký
		}
150
	}
151
152
}