1 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.0//EN">
6 <style type=
"text/css">
9 font-family: verdana
, sans-serif
;
29 text-decoration:underline
;
34 text-decoration: none
;
47 border-bottom-width:1px;
48 border-bottom-style:dotted
;
64 <table width=
"90%" border=
"0" cellspacing=
"1" cellpadding=
"5">
67 <big><tt>Global.helma.sqlshell.Datasource.prototype.main
()
</tt></big><br>
87 <table width=
"90%" border=
"0" cellspacing=
"1" cellpadding=
"5">
89 <td>Sourcecode in helmaTools.zip/Global/helma.sqlshell.js:
90 <pre><font color=
"#aaaaaa">177:
</font> helma.sqlshell.Datasource.prototype.main = function() {
91 <font color=
"#aaaaaa">178:
</font> res.handlers.datasource = this;
92 <font color=
"#aaaaaa">179:
</font> if (!req.data.tab) {
93 <font color=
"#aaaaaa">180:
</font> req.data.tab =
<font color=
"#9999aa">"explore
"</font>;
94 <font color=
"#aaaaaa">181:
</font> }
95 <font color=
"#aaaaaa">182:
</font> res.data.tabcolor = helma.sqlshell.colors[req.data.tab];
96 <font color=
"#aaaaaa">183:
</font>
97 <font color=
"#aaaaaa">184:
</font> var param = new Object();
98 <font color=
"#aaaaaa">185:
</font> param.action = this.href();
99 <font color=
"#aaaaaa">186:
</font>
100 <font color=
"#aaaaaa">187:
</font> <font color=
"#33aa00"> // get connection
101 <font color=
"#aaaaaa">188:
</font> </font> var con = this.datasource.getConnection();
102 <font color=
"#aaaaaa">189:
</font>
103 <font color=
"#aaaaaa">190:
</font> <font color=
"#33aa00"> // get database meta data
104 <font color=
"#aaaaaa">191:
</font> </font> var meta = con.getMetaData();
105 <font color=
"#aaaaaa">192:
</font>
106 <font color=
"#aaaaaa">193:
</font> res.data.datasources = helma.sqlshell.getDatasources();
107 <font color=
"#aaaaaa">194:
</font> res.data.schemas = this.getSchemas(meta);
108 <font color=
"#aaaaaa">195:
</font> var schema = req.data.schema;
109 <font color=
"#aaaaaa">196:
</font> res.data.tables = this.getTables(meta, schema);
110 <font color=
"#aaaaaa">197:
</font>
111 <font color=
"#aaaaaa">198:
</font> if (req.data.action) {
112 <font color=
"#aaaaaa">199:
</font> app.data.repositories = helma.sqlshell.getRepositories();
113 <font color=
"#aaaaaa">200:
</font> if (req.data.action ==
<font color=
"#9999aa">"createproto
"</font> ) {
114 <font color=
"#aaaaaa">201:
</font> var repos = app.repositories[req.data.repository];
115 <font color=
"#aaaaaa">202:
</font> var file = new File(repos.directory.toString(), req.data.protoname);
116 <font color=
"#aaaaaa">203:
</font> if (file.mkdir()) {
117 <font color=
"#aaaaaa">204:
</font>
118 <font color=
"#aaaaaa">205:
</font> renderSkin(this.getSkin(
<font color=
"#9999aa">"closePopup
"</font>), {
119 <font color=
"#aaaaaa">206:
</font> parentUrl: this.href() +
<font color=
"#9999aa">"&prototype=
"</font> + req.data.protoname,
120 <font color=
"#aaaaaa">207:
</font> message:
<font color=
"#9999aa">"<p
>Created directory
"</font> + file +
<font color=
"#9999aa">"</p
>"</font> +
121 <font color=
"#aaaaaa">208:
</font> <font color=
"#9999aa">"<p
>Please wait for prototypes to be updated...
</p
>"</font>
122 <font color=
"#aaaaaa">209:
</font> } );
123 <font color=
"#aaaaaa">210:
</font> return;
124 <font color=
"#aaaaaa">211:
</font> } else {
125 <font color=
"#aaaaaa">212:
</font> res.debug(
<font color=
"#9999aa">"Couldn't create directory:
"</font> + file);
126 <font color=
"#aaaaaa">213:
</font> res.data.body = renderSkinAsString(this.getSkin(
<font color=
"#9999aa">"newproto
"</font>));
127 <font color=
"#aaaaaa">214:
</font> }
128 <font color=
"#aaaaaa">215:
</font> } else if (req.data.action ==
<font color=
"#9999aa">"extras
"</font>) {
129 <font color=
"#aaaaaa">216:
</font> var p = {};
130 <font color=
"#aaaaaa">217:
</font> var t = app.getPrototype(req.data.target);
131 <font color=
"#aaaaaa">218:
</font> var target = t
&& t.dbMapping ? t.dbMapping.tableName : null;
132 <font color=
"#aaaaaa">219:
</font> p.targetColumns = this.getColumns(meta, schema, target).toSource();
133 <font color=
"#aaaaaa">220:
</font> p.localColumns = this.getColumns(meta, schema, req.data.__sqlshell_table__).toSource();
134 <font color=
"#aaaaaa">221:
</font> res.data.body = renderSkinAsString(this.getSkin(req.data.action), p);
135 <font color=
"#aaaaaa">222:
</font> } else if (req.data.action ==
<font color=
"#9999aa">"generate
"</font>) {
136 <font color=
"#aaaaaa">223:
</font> if (req.data.create) {
137 <font color=
"#aaaaaa">224:
</font> renderSkin(this.getSkin(
<font color=
"#9999aa">"closePopup
"</font>), {
138 <font color=
"#aaaaaa">225:
</font> parentUrl: this.href() +
<font color=
"#9999aa">"&prototype=
"</font> + req.data.__sqlshell_prototype__,
139 <font color=
"#aaaaaa">226:
</font> message:
<font color=
"#9999aa">"<p
>Created type mapping
"</font> + file +
<font color=
"#9999aa">"</p
>"</font> +
140 <font color=
"#aaaaaa">227:
</font> <font color=
"#9999aa">"<p
>Please wait for prototypes to be updated...
</p
>"</font>
141 <font color=
"#aaaaaa">228:
</font> } );
142 <font color=
"#aaaaaa">229:
</font> } else {
143 <font color=
"#aaaaaa">230:
</font> var fields = {};
144 <font color=
"#aaaaaa">231:
</font> var s = new java.lang.StringBuffer();
145 <font color=
"#aaaaaa">232:
</font> for (var i in req.data) {
146 <font color=
"#aaaaaa">233:
</font> if (i.indexOf(
<font color=
"#9999aa">"maptype_
"</font>) ==
0) {
147 <font color=
"#aaaaaa">234:
</font> fields[i.substring(
8)] = req.data[i];
148 <font color=
"#aaaaaa">235:
</font> }
149 <font color=
"#aaaaaa">236:
</font> s.append(
<font color=
"#9999aa">"<input type='hidden' name='
"</font>).append(i)
150 <font color=
"#aaaaaa">237:
</font> .append(
<font color=
"#9999aa">"' value='
"</font>).append(
<font color=
"#9999aa">""</font> + req.data[i]).append(
<font color=
"#9999aa">"'
>"</font>);
151 <font color=
"#aaaaaa">238:
</font> }
152 <font color=
"#aaaaaa">239:
</font> if (req.data.__sqlshell_create__) {
153 <font color=
"#aaaaaa">240:
</font> <font color=
"#33aa00"> // res.data.body = renderSkinAsString(this.getSkin(
<font color=
"#9999aa">"generate
"</font>), p);
154 <font color=
"#aaaaaa">241:
</font> </font> var repos = app.getPrototype(req.data.__sqlshell_prototype__).repositories;
155 <font color=
"#aaaaaa">242:
</font> var resName =
<font color=
"#9999aa">"type.properties
"</font>;
156 <font color=
"#aaaaaa">243:
</font> for (var i in repos) {
157 <font color=
"#aaaaaa">244:
</font> var resource = repos[i].getResource(resName);
158 <font color=
"#aaaaaa">245:
</font> if (resource
&& resource.exists()) {
159 <font color=
"#aaaaaa">246:
</font> if (resource.getClass() == Packages.helma.framework.repository.FileResource) {
160 <font color=
"#aaaaaa">247:
</font> var file = new File(resource.getName());
161 <font color=
"#aaaaaa">248:
</font> var backup = new File(resource.getName() +
<font color=
"#9999aa">".bak
"</font>);
162 <font color=
"#aaaaaa">249:
</font> if (backup.exists()) {
163 <font color=
"#aaaaaa">250:
</font> var n =
1;
164 <font color=
"#aaaaaa">251:
</font> do {
165 <font color=
"#aaaaaa">252:
</font> backup = new File(resource.getName() +
<font color=
"#9999aa">".bak.
"</font> + n++)
166 <font color=
"#aaaaaa">253:
</font> } while (backup.exists());
167 <font color=
"#aaaaaa">254:
</font> }
168 <font color=
"#aaaaaa">255:
</font> if (!file.renameTo(backup)) {
169 <font color=
"#aaaaaa">256:
</font> res.debug(
<font color=
"#9999aa">"ERROR: Couldn't create backup for
"</font> + resource);
170 <font color=
"#aaaaaa">257:
</font> }
171 <font color=
"#aaaaaa">258:
</font> } else {
172 <font color=
"#aaaaaa">259:
</font> res.debug(
<font color=
"#9999aa">"WARNING: Couldn't move
"</font> + resource);
173 <font color=
"#aaaaaa">260:
</font> }
174 <font color=
"#aaaaaa">261:
</font> }
175 <font color=
"#aaaaaa">262:
</font> }
176 <font color=
"#aaaaaa">263:
</font> var file = new File(repos[req.data.__sqlshell_repository__].getResource(resName).getName());
177 <font color=
"#aaaaaa">264:
</font> file.open();
178 <font color=
"#aaaaaa">265:
</font> file.writeln(
<font color=
"#9999aa">"# Created by Helma SqlShell at
"</font> + new Date());
179 <font color=
"#aaaaaa">266:
</font> if (req.data.__sqlshell_extends__)
180 <font color=
"#aaaaaa">267:
</font> file.writeln(
<font color=
"#9999aa">"_extends =
"</font> + req.data.__sqlshell_extends__);
181 <font color=
"#aaaaaa">268:
</font> if (req.data.__sqlshell_primaryKey__)
182 <font color=
"#aaaaaa">269:
</font> file.writeln(
<font color=
"#9999aa">"_id =
"</font> + req.data.__sqlshell_primaryKey__);
183 <font color=
"#aaaaaa">270:
</font> if (req.data.__sqlshell_protoColumn__)
184 <font color=
"#aaaaaa">271:
</font> file.writeln(
<font color=
"#9999aa">"_prototype =
"</font> + req.data.__sqlshell_protoColumn__);
185 <font color=
"#aaaaaa">272:
</font> if (req.data.__sqlshell_nameColumn__)
186 <font color=
"#aaaaaa">273:
</font> file.writeln(
<font color=
"#9999aa">"_name =
"</font> + req.data.__sqlshell_nameColumn__);
187 <font color=
"#aaaaaa">274:
</font> file.writeln(
<font color=
"#9999aa">""</font>);
188 <font color=
"#aaaaaa">275:
</font> for (var i in fields) {
189 <font color=
"#aaaaaa">276:
</font> var propType = parseInt(fields[i]);
190 <font color=
"#aaaaaa">277:
</font> var propName = req.data[i];
191 <font color=
"#aaaaaa">278:
</font> if (!propName) continue;
192 <font color=
"#aaaaaa">279:
</font> file.write(propName);
193 <font color=
"#aaaaaa">280:
</font> file.write(
<font color=
"#9999aa">" =
"</font>);
194 <font color=
"#aaaaaa">281:
</font> switch (propType) {
195 <font color=
"#aaaaaa">282:
</font> case
0:
196 <font color=
"#aaaaaa">283:
</font> file.writeln(req.data[i]);
197 <font color=
"#aaaaaa">284:
</font> break;
198 <font color=
"#aaaaaa">285:
</font> case
1:
199 <font color=
"#aaaaaa">286:
</font> file.writeln(
<font color=
"#9999aa">"object(
"</font> + req.data[
<font color=
"#9999aa">"target_
"</font> + i] +
<font color=
"#9999aa">")
"</font>);
200 <font color=
"#aaaaaa">287:
</font> break;
201 <font color=
"#aaaaaa">288:
</font> case
2:
202 <font color=
"#aaaaaa">289:
</font> file.writeln(
<font color=
"#9999aa">"collection(
"</font> + req.data[
<font color=
"#9999aa">"target_
"</font> + i] +
<font color=
"#9999aa">")
"</font>);
203 <font color=
"#aaaaaa">290:
</font> break;
204 <font color=
"#aaaaaa">291:
</font> case
3:
205 <font color=
"#aaaaaa">292:
</font> file.writeln(
<font color=
"#9999aa">"mountpoint(
"</font> + req.data[
<font color=
"#9999aa">"target_
"</font> + i] +
<font color=
"#9999aa">")
"</font>);
206 <font color=
"#aaaaaa">293:
</font> break;
207 <font color=
"#aaaaaa">294:
</font> default:
208 <font color=
"#aaaaaa">295:
</font> res.debug(i +
<font color=
"#9999aa">":
"</font> + fields[i]);
209 <font color=
"#aaaaaa">296:
</font> }
210 <font color=
"#aaaaaa">297:
</font> for (var m in this.mappingOptions) {
211 <font color=
"#aaaaaa">298:
</font> if (this.mappingOptions[m]
<= propType
&& req.data[i +
<font color=
"#9999aa">"_
"</font> + m]) {
212 <font color=
"#aaaaaa">299:
</font> file.write(propName);
213 <font color=
"#aaaaaa">300:
</font> file.write(
<font color=
"#9999aa">".
"</font>);
214 <font color=
"#aaaaaa">301:
</font> file.write(m.replace(
<font color=
"#9999aa">"_
"</font>,
<font color=
"#9999aa">".
"</font>));
215 <font color=
"#aaaaaa">302:
</font> file.write(
<font color=
"#9999aa">" =
"</font>);
216 <font color=
"#aaaaaa">303:
</font> file.writeln(req.data[i +
<font color=
"#9999aa">"_
"</font> + m]);
217 <font color=
"#aaaaaa">304:
</font> }
218 <font color=
"#aaaaaa">305:
</font> }
219 <font color=
"#aaaaaa">306:
</font> file.writeln(
<font color=
"#9999aa">""</font>);
220 <font color=
"#aaaaaa">307:
</font> }
221 <font color=
"#aaaaaa">308:
</font> file.close();
222 <font color=
"#aaaaaa">309:
</font> res.data.body =
<font color=
"#9999aa">"Successfully created mapping in
"</font> + file;
223 <font color=
"#aaaaaa">310:
</font> } else {
224 <font color=
"#aaaaaa">311:
</font> var p = {};
225 <font color=
"#aaaaaa">312:
</font> p.data = s.toString();
226 <font color=
"#aaaaaa">313:
</font> res.data.repositories = helma.sqlshell.getProtoRepositories(req.data.__sqlshell_prototype__);
227 <font color=
"#aaaaaa">314:
</font> res.data.body = renderSkinAsString(this.getSkin(
<font color=
"#9999aa">"generate
"</font>), p);
228 <font color=
"#aaaaaa">315:
</font> }
229 <font color=
"#aaaaaa">316:
</font> }
230 <font color=
"#aaaaaa">317:
</font> } else {
231 <font color=
"#aaaaaa">318:
</font> res.data.body = renderSkinAsString(this.getSkin(req.data.action));
232 <font color=
"#aaaaaa">319:
</font> }
233 <font color=
"#aaaaaa">320:
</font> } else {
234 <font color=
"#aaaaaa">321:
</font> <font color=
"#33aa00"> // should we display type info on some table?
235 <font color=
"#aaaaaa">322:
</font> </font> if (req.data.tab ==
<font color=
"#9999aa">"explore
"</font>) {
236 <font color=
"#aaaaaa">323:
</font> param.body = this.explore(meta, schema, param);
237 <font color=
"#aaaaaa">324:
</font> } else if (req.data.tab ==
<font color=
"#9999aa">"query
"</font>) {
238 <font color=
"#aaaaaa">325:
</font> param.body = this.query(con, param);
239 <font color=
"#aaaaaa">326:
</font> } else if (req.data.tab ==
<font color=
"#9999aa">"map
"</font>) {
240 <font color=
"#aaaaaa">327:
</font> param.body = this.map(meta, schema, con, param);
241 <font color=
"#aaaaaa">328:
</font> }
242 <font color=
"#aaaaaa">329:
</font> <font color=
"#33aa00"> // render the inner page skin and then the whole page
243 <font color=
"#aaaaaa">330:
</font> </font> res.data.body = renderSkinAsString(
<font color=
"#9999aa">"helma.sqlshell.main
"</font>, param);
244 <font color=
"#aaaaaa">331:
</font> }
245 <font color=
"#aaaaaa">332:
</font>
246 <font color=
"#aaaaaa">333:
</font> renderSkin(
<font color=
"#9999aa">"helma.sqlshell.page
"</font>);
247 <font color=
"#aaaaaa">334:
</font> }