Projekt

Obecné

Profil

Stáhnout (3.91 KB) Statistiky
| Větev: | Tag: | Revize:
1
import java.io.BufferedWriter;
2
import java.io.File;
3
import java.io.FileDescriptor;
4
import java.io.FileOutputStream;
5
import java.io.FileWriter;
6
import java.io.IOException;
7
import java.io.PrintStream;
8
import java.util.HashMap;
9
import java.util.List;
10
import java.util.concurrent.Semaphore;
11
import java.util.concurrent.atomic.AtomicBoolean;
12
import java.util.concurrent.atomic.AtomicReference;
13
import java.util.concurrent.locks.Lock;
14
import java.util.concurrent.locks.ReentrantLock;
15

    
16
import jdeserialize.content;
17
import jdeserialize.jdeserialize;
18
import io.Database.DB_Messenger;
19
import io.Database;
20
import io.FileWorker;
21

    
22
public class Converter extends Thread {
23

    
24
	private IConversionResults ui;
25
	private AtomicBoolean active;
26

    
27
	// P-K without E semaphore.
28
	private Lock entryLock;
29
	private Semaphore inputAvailable;
30

    
31
	// Input.
32
	private File inputFile;
33
	private DB_Messenger query;
34

    
35
	public Converter(IConversionResults ui) {
36
		this.ui = ui;
37
		active = new AtomicBoolean(true);
38
		entryLock = new ReentrantLock();
39
		inputAvailable = new Semaphore(0);
40
	}
41

    
42
	public void end() {
43
		active.set(false);
44
		setInput(null, null);
45
	}
46
	
47
	public void setInput(File inputFile, DB_Messenger query) {
48
		entryLock.lock();
49
		this.inputFile = inputFile;
50
		this.query = query;
51
		entryLock.unlock();
52

    
53
		if (!inputAvailable.tryAcquire())
54
			inputAvailable.release(); // MAX VALUE = 1!
55
	}
56
	
57
	public boolean getInput(AtomicReference<File> inputFile, AtomicReference<DB_Messenger> query) {
58
		try {
59
			inputAvailable.acquire();
60
		} catch (InterruptedException e) {
61
			return false;
62
		}
63

    
64
		entryLock.lock();
65
		inputFile.set(this.inputFile);
66
		query.set(this.query);
67
		
68
		this.inputFile = null;
69
		this.query = null;
70
		entryLock.unlock();
71

    
72
		return inputFile.get() != null || query.get() != null;
73
	}
74

    
75
	@Override
76
	public void run() {
77
		super.run();
78
		while (active.get()) {
79
			AtomicReference<File> inputFile = new AtomicReference<File>();
80
			AtomicReference<DB_Messenger> query = new AtomicReference<DB_Messenger>();
81

    
82
			if (!getInput(inputFile, query)) {
83
				continue;
84
			}
85

    
86
			byte array[] = inputFile.get() != null ? getBytes(inputFile.get()) : getBytes(query.get());
87
			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
			}
100

    
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
			ui.completed(html.toString(), json.toString(), array == null ? null : new String(array));
117
		}
118
	}
119

    
120
	private byte[] getBytes(File input) {
121
		byte array[];
122
		try {
123
			array = FileWorker.loadByteArray(input);
124
		} catch (IOException e) {
125
			ui.loadingInputFileError();
126
			return null;
127
		}
128
		return array;
129
	}
130
	
131
	private byte[] getBytes(DB_Messenger query) {
132
		return Database.getBlobBytes(query);
133
	}
134

    
135
	private void convert(byte[] buffer, StringBuilder html, StringBuilder json) throws Exception {
136
		jdeserialize deserializer = new jdeserialize(buffer);
137

    
138
		// gets the "contents" into an array - returnes the deserialization of all
139
		// 'writes' into serialized object via objectOutputStream
140
		List<content> cntnts = deserializer.getContent();
141

    
142
		for (content cnt : cntnts) {
143
			if (cnt != null) {
144
				json.append(cnt.toJson("", null, false)).append("\n");
145
				html.append(cnt.toJson("", null, false));
146
			}
147
		}
148
	}
149

    
150
}
(2-2/6)