Revision d59e7ee5
Added by shye0000 about 10 years ago
| Asynchronous_Download_java_sitools2/PublicOrderResource.java | ||
|---|---|---|
| 1 |
/******************************************************************************* |
|
| 2 |
* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES |
|
| 3 |
* |
|
| 4 |
* This file is part of SITools2. |
|
| 5 |
* |
|
| 6 |
* SITools2 is free software: you can redistribute it and/or modify |
|
| 7 |
* it under the terms of the GNU General Public License as published by |
|
| 8 |
* the Free Software Foundation, either version 3 of the License, or |
|
| 9 |
* (at your option) any later version. |
|
| 10 |
* |
|
| 11 |
* SITools2 is distributed in the hope that it will be useful, |
|
| 12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 14 |
* GNU General Public License for more details. |
|
| 15 |
* |
|
| 16 |
* You should have received a copy of the GNU General Public License |
|
| 17 |
* along with SITools2. If not, see <http://www.gnu.org/licenses/>. |
|
| 18 |
******************************************************************************/ |
|
| 19 |
package fr.cnes.sitools.resources.order; |
|
| 20 |
|
|
| 21 |
import java.io.IOException; |
|
| 22 |
import java.util.ArrayList; |
|
| 23 |
import java.util.Iterator; |
|
| 24 |
import java.util.List; |
|
| 25 |
import java.util.logging.Level; |
|
| 26 |
import java.util.Map; |
|
| 27 |
import java.util.HashMap; |
|
| 28 |
import java.io.UnsupportedEncodingException; |
|
| 29 |
import java.net.URLEncoder; |
|
| 30 |
|
|
| 31 |
import org.restlet.data.Reference; |
|
| 32 |
import org.restlet.data.Status; |
|
| 33 |
import org.restlet.representation.Representation; |
|
| 34 |
import org.restlet.resource.ResourceException; |
|
| 35 |
import org.restlet.security.User; |
|
| 36 |
|
|
| 37 |
import fr.cnes.sitools.common.exception.SitoolsException; |
|
| 38 |
import fr.cnes.sitools.dataset.database.DatabaseRequest; |
|
| 39 |
import fr.cnes.sitools.datasource.jdbc.model.AttributeValue; |
|
| 40 |
import fr.cnes.sitools.datasource.jdbc.model.Record; |
|
| 41 |
import fr.cnes.sitools.plugins.resources.model.ResourceModel; |
|
| 42 |
import fr.cnes.sitools.plugins.resources.model.ResourceParameter; |
|
| 43 |
import fr.cnes.sitools.resources.order.utils.ListReferencesAPI; |
|
| 44 |
import fr.cnes.sitools.resources.order.utils.OrderAPI; |
|
| 45 |
import fr.cnes.sitools.resources.order.utils.OrderResourceUtils; |
|
| 46 |
import fr.cnes.sitools.server.Consts; |
|
| 47 |
import fr.cnes.sitools.util.RIAPUtils; |
|
| 48 |
import fr.cnes.sitools.order.model.Order; |
|
| 49 |
import org.restlet.Context; |
|
| 50 |
import fr.cnes.sitools.tasks.business.Task; |
|
| 51 |
import fr.cnes.sitools.mail.model.Mail; |
|
| 52 |
import org.restlet.Request; |
|
| 53 |
import org.restlet.data.Method; |
|
| 54 |
import org.restlet.representation.ObjectRepresentation; |
|
| 55 |
import fr.cnes.sitools.util.TemplateUtils; |
|
| 56 |
import fr.cnes.sitools.util.Util; |
|
| 57 |
|
|
| 58 |
|
|
| 59 |
/** |
|
| 60 |
* Default OrderResource implementation. |
|
| 61 |
* <p> |
|
| 62 |
* The parameter colUrl is used to specify a column containing the list of URLs of the files to order. Each file is then |
|
| 63 |
* either copied or Zipped to the userstorage of the user. |
|
| 64 |
* </p> |
|
| 65 |
* |
|
| 66 |
* |
|
| 67 |
* @author m.gond |
|
| 68 |
*/ |
|
| 69 |
public class PublicOrderResource extends AbstractDatasetOrderResource {
|
|
| 70 |
/** Maximum number of file to download authorized, default to -1 => no limit */ |
|
| 71 |
private int nbMaxDownload = -1; |
|
| 72 |
private fr.cnes.sitools.security.model.User userDetails; |
|
| 73 |
/* |
|
| 74 |
* (non-Javadoc) |
|
| 75 |
* |
|
| 76 |
* @see fr.cnes.sitools.resources.order.AbstractOrderResource#checkUser() |
|
| 77 |
*/ |
|
| 78 |
@Override |
|
| 79 |
public void checkUser() {
|
|
| 80 |
User user = getClientInfo().getUser(); |
|
| 81 |
if (user == null) {
|
|
| 82 |
userDetails=null; |
|
| 83 |
} |
|
| 84 |
else{
|
|
| 85 |
try {
|
|
| 86 |
userDetails = this.getUserDetails(user.getIdentifier(), getContext()); |
|
| 87 |
} |
|
| 88 |
catch (SitoolsException e) {
|
|
| 89 |
userDetails=null; |
|
| 90 |
} |
|
| 91 |
|
|
| 92 |
} |
|
| 93 |
|
|
| 94 |
|
|
| 95 |
} |
|
| 96 |
|
|
| 97 |
public void notifyAdminEnd() throws SitoolsException {
|
|
| 98 |
try {
|
|
| 99 |
sendMail(order, getContext(), userDetails, task); |
|
| 100 |
} |
|
| 101 |
catch (SitoolsException e) {
|
|
| 102 |
// ne rien faire si le mail n'est pas parti |
|
| 103 |
OrderAPI.createEvent(order, getContext(), "MAIL_NOT_SEND_TO_USER"); |
|
| 104 |
} |
|
| 105 |
} |
|
| 106 |
|
|
| 107 |
protected void sendMail(Order order, Context context, fr.cnes.sitools.security.model.User user, Task task) |
|
| 108 |
throws SitoolsException{
|
|
| 109 |
List<String> toList = new ArrayList<String>(); |
|
| 110 |
if(user!=null){
|
|
| 111 |
String userAdd = user.getEmail(); |
|
| 112 |
if (userAdd != null && !userAdd.equals("")) {
|
|
| 113 |
// System.out.println("EMAIL ADDRESS = " + userAdd);
|
|
| 114 |
toList.add(userAdd); |
|
| 115 |
|
|
| 116 |
Mail mailToUser = new Mail(); |
|
| 117 |
mailToUser.setToList(toList); |
|
| 118 |
|
|
| 119 |
// TODO EVOL : email subject should be a parameter |
|
| 120 |
mailToUser.setSubject(getMailSubject()); |
|
| 121 |
|
|
| 122 |
// default body |
|
| 123 |
mailToUser.setBody(getMailBody(mailToUser)); |
|
| 124 |
|
|
| 125 |
org.restlet.Response sendMailResponse = null; |
|
| 126 |
try {
|
|
| 127 |
// riap request to MailAdministration application |
|
| 128 |
Request request = new Request(Method.POST, RIAPUtils.getRiapBase() |
|
| 129 |
+ settings.getString(Consts.APP_MAIL_ADMIN_URL), new ObjectRepresentation<Mail>(mailToUser)); |
|
| 130 |
|
|
| 131 |
sendMailResponse = getContext().getClientDispatcher().handle(request); |
|
| 132 |
} |
|
| 133 |
catch (Exception e) {
|
|
| 134 |
getLogger().warning("SERVER ERROR SENDING EMAIL TO USER");
|
|
| 135 |
throw new ResourceException(Status.SERVER_ERROR_INTERNAL, e); |
|
| 136 |
} |
|
| 137 |
if (sendMailResponse.getStatus().isError()) {
|
|
| 138 |
throw new SitoolsException("SERVER ERROR SENDING EMAIL TO USER");
|
|
| 139 |
} |
|
| 140 |
|
|
| 141 |
// OK |
|
| 142 |
} |
|
| 143 |
else {
|
|
| 144 |
throw new SitoolsException("NO EMAIL ADDRESS DEFINED");
|
|
| 145 |
} |
|
| 146 |
} |
|
| 147 |
else{
|
|
| 148 |
ResourceModel resourceModel = getModel(); |
|
| 149 |
ResourceParameter email = resourceModel.getParameterByName("Email");
|
|
| 150 |
String userAdd = this.getRequest().getResourceRef().getQueryAsForm().getFirstValue("Email");
|
|
| 151 |
//String userAdd = email.getValue(); |
|
| 152 |
getContext().getLogger().info("******************* UserEmail : "+userAdd);
|
|
| 153 |
if (userAdd != null && !userAdd.equals("")) {
|
|
| 154 |
toList.add(userAdd); |
|
| 155 |
Mail mailToPublic = new Mail(); |
|
| 156 |
mailToPublic.setToList(toList); |
|
| 157 |
mailToPublic.setSubject(getMailSubject()); |
|
| 158 |
mailToPublic.setBody(getMailBodyPublic(mailToPublic)); |
|
| 159 |
org.restlet.Response sendMailResponse = null; |
|
| 160 |
try {
|
|
| 161 |
Request request = new Request(Method.POST, RIAPUtils.getRiapBase() |
|
| 162 |
+ settings.getString(Consts.APP_MAIL_ADMIN_URL), new ObjectRepresentation<Mail>(mailToPublic)); |
|
| 163 |
|
|
| 164 |
sendMailResponse = getContext().getClientDispatcher().handle(request); |
|
| 165 |
} |
|
| 166 |
catch (Exception e) {
|
|
| 167 |
getLogger().warning("SERVER ERROR SENDING EMAIL TO PUBLIC DOWNLOADER");
|
|
| 168 |
throw new ResourceException(Status.SERVER_ERROR_INTERNAL, e); |
|
| 169 |
} |
|
| 170 |
if (sendMailResponse.getStatus().isError()) {
|
|
| 171 |
throw new SitoolsException("SERVER ERROR SENDING EMAIL TO PUBLIC DOWNLOADER");
|
|
| 172 |
} |
|
| 173 |
} |
|
| 174 |
else{
|
|
| 175 |
throw new SitoolsException("NO EMAIL ADDRESS DEFINED");
|
|
| 176 |
} |
|
| 177 |
} |
|
| 178 |
|
|
| 179 |
} |
|
| 180 |
|
|
| 181 |
|
|
| 182 |
protected String getMailBodyPublic(Mail mailToPublic) {
|
|
| 183 |
// default body |
|
| 184 |
String orderNameEncoded = order.getDescription(); |
|
| 185 |
String fileNameEncoded = order.getDescription(); |
|
| 186 |
|
|
| 187 |
try{
|
|
| 188 |
orderNameEncoded = URLEncoder.encode(order.getDescription(),"UTF-8"); |
|
| 189 |
} catch (UnsupportedEncodingException e){
|
|
| 190 |
e.printStackTrace(); |
|
| 191 |
} |
|
| 192 |
try{
|
|
| 193 |
fileNameEncoded = URLEncoder.encode(orderNameEncoded,"UTF-8"); |
|
| 194 |
} catch (UnsupportedEncodingException e){
|
|
| 195 |
e.printStackTrace(); |
|
| 196 |
} |
|
| 197 |
String mailBody = "Dear visiter"+":<br/><br/>Your command is complete. <br/>" + "File Name : " |
|
| 198 |
+ order.getDescription() + "<br/>" |
|
| 199 |
+"Now you can click the link below to download it:<br/><a href='http://idoc-picard.ias.u-psud.fr:8182/sitools/userstorage/public/files/resources_orders/" |
|
| 200 |
+orderNameEncoded+"/"+fileNameEncoded+".zip" |
|
| 201 |
+"'>http://idoc-picard.ias.u-psud.fr:8182/sitools/userstorage/public/files/resources_orders/" |
|
| 202 |
+orderNameEncoded+"/"+fileNameEncoded+".zip</a>" |
|
| 203 |
+"<br/><br/>Admin<br/><a href='http://idoc-picard.ias.u-psud.fr'>PICARD ARCHIVE</a>"; |
|
| 204 |
|
|
| 205 |
// use a freemarker template for email body with Mail object |
|
| 206 |
String templatePath = settings.getRootDirectory() + settings.getString(Consts.TEMPLATE_DIR) |
|
| 207 |
+ "mail.order.complete.ftl"; |
|
| 208 |
|
|
| 209 |
Map<String, Object> root = new HashMap<String, Object>(); |
|
| 210 |
root.put("mail", mailToPublic);
|
|
| 211 |
root.put("order", order);
|
|
| 212 |
String adminmail = settings.getString("Starter.StatusService.CONTACT_MAIL");
|
|
| 213 |
root.put("adminmail", adminmail);
|
|
| 214 |
|
|
| 215 |
TemplateUtils.describeObjectClassesForTemplate(templatePath, root); |
|
| 216 |
|
|
| 217 |
root.put("context", getContext());
|
|
| 218 |
|
|
| 219 |
String body = TemplateUtils.toString(templatePath, root); |
|
| 220 |
if (Util.isNotEmpty(body)) {
|
|
| 221 |
return body; |
|
| 222 |
} |
|
| 223 |
else {
|
|
| 224 |
return mailBody; |
|
| 225 |
} |
|
| 226 |
} |
|
| 227 |
|
|
| 228 |
|
|
| 229 |
|
|
| 230 |
@Override |
|
| 231 |
public ListReferencesAPI listFilesToOrder(DatabaseRequest dbRequest) throws SitoolsException {
|
|
| 232 |
task.setCustomStatus("Creating list of files to order");
|
|
| 233 |
ResourceModel resourceModel = getModel(); |
|
| 234 |
ResourceParameter nbMaxDownloadParam = resourceModel.getParameterByName("too_many_selected_threshold");
|
|
| 235 |
if (nbMaxDownloadParam != null && !"".equals(nbMaxDownloadParam)) {
|
|
| 236 |
try {
|
|
| 237 |
nbMaxDownload = Integer.parseInt(nbMaxDownloadParam.getValue()); |
|
| 238 |
} |
|
| 239 |
catch (NumberFormatException e) {
|
|
| 240 |
nbMaxDownload = -1; |
|
| 241 |
} |
|
| 242 |
} |
|
| 243 |
|
|
| 244 |
if (nbMaxDownload != -1 && nbMaxDownload < dbRequest.getCount()) {
|
|
| 245 |
ResourceParameter errorTextParam = resourceModel.getParameterByName("too_many_selected_threshold_text");
|
|
| 246 |
String errorText = (errorTextParam != null && !"".equals(errorTextParam.getValue())) ? errorTextParam.getValue() |
|
| 247 |
: "Too many file selected"; |
|
| 248 |
throw new ResourceException(Status.CLIENT_ERROR_BAD_REQUEST, errorText); |
|
| 249 |
} |
|
| 250 |
|
|
| 251 |
ResourceParameter colUrl = resourceModel.getParameterByName("colUrl");
|
|
| 252 |
if (colUrl.getValue() == null || colUrl.getValue().equals("")) {
|
|
| 253 |
throw new SitoolsException("NO COLUMN DEFINED FOR ORDER");
|
|
| 254 |
} |
|
| 255 |
|
|
| 256 |
ListReferencesAPI list = new ListReferencesAPI(settings.getPublicHostDomain() + settings.getString(Consts.APP_URL)); |
|
| 257 |
while (dbRequest.nextResult()) {
|
|
| 258 |
Record rec = dbRequest.getRecord(); |
|
| 259 |
AttributeValue attributeValue = OrderResourceUtils.getInParam(colUrl, rec); |
|
| 260 |
|
|
| 261 |
if (attributeValue != null && attributeValue.getValue() != null) {
|
|
| 262 |
// get the file path |
|
| 263 |
String filePath = (String) attributeValue.getValue(); |
|
| 264 |
String urlAttach = settings.getString(Consts.APP_DATASTORAGE_URL); |
|
| 265 |
// if it contains "/datastorage" get rid of everything before |
|
| 266 |
if (filePath.contains(urlAttach)) {
|
|
| 267 |
filePath = filePath.substring(filePath.lastIndexOf(urlAttach)); |
|
| 268 |
} |
|
| 269 |
if (filePath.startsWith("http://")) {
|
|
| 270 |
list.addReferenceSource(new Reference(filePath)); |
|
| 271 |
} |
|
| 272 |
else {
|
|
| 273 |
list.addReferenceSource(new Reference(RIAPUtils.getRiapBase() + filePath)); |
|
| 274 |
} |
|
| 275 |
|
|
| 276 |
} |
|
| 277 |
} |
|
| 278 |
return list; |
|
| 279 |
} |
|
| 280 |
|
|
| 281 |
@Override |
|
| 282 |
public Representation processOrder(ListReferencesAPI listReferences) throws SitoolsException {
|
|
| 283 |
task.setCustomStatus("Order processing");
|
|
| 284 |
OrderAPI.createEvent(order, getContext(), "PROCESSING ORDER"); |
|
| 285 |
|
|
| 286 |
List<Reference> listOfFilesToOrder = listReferences.getReferencesSource(); |
|
| 287 |
|
|
| 288 |
getContext().getLogger().info("******************* User : "+task.getUser());
|
|
| 289 |
getContext().getLogger().info("******************* folder : "+settings.getString(Consts.USERSTORAGE_RESOURCE_ORDER_DIR) + folderName);
|
|
| 290 |
Reference destRef = OrderResourceUtils.getUserAvailableFolderPath(task.getUser(), |
|
| 291 |
settings.getString(Consts.USERSTORAGE_RESOURCE_ORDER_DIR) + folderName, getContext()); |
|
| 292 |
|
|
| 293 |
ResourceModel resourceModel = getModel(); |
|
| 294 |
ResourceParameter zipParam = resourceModel.getParameterByName("zip");
|
|
| 295 |
|
|
| 296 |
// zip is a USER_INPUT parameter, let's get it from the request |
|
| 297 |
// parameters |
|
| 298 |
String zipValue = this.getRequest().getResourceRef().getQueryAsForm().getFirstValue("zip");
|
|
| 299 |
if (zipValue == null || zipValue.equals("") || (!"false".equals(zipValue) && !"true".equals(zipValue))) {
|
|
| 300 |
zipValue = zipParam.getValue(); |
|
| 301 |
} |
|
| 302 |
|
|
| 303 |
Boolean zip = Boolean.parseBoolean(zipValue); |
|
| 304 |
if (zip) {
|
|
| 305 |
task.getLogger().log(Level.INFO, zipParam.getName().toUpperCase() + " in progress for user : " |
|
| 306 |
+ task.getUser().getIdentifier() + " -> ip :" + getClientInfo().getUpstreamAddress()); |
|
| 307 |
|
|
| 308 |
task.getLogger().info("List of files ordered :");
|
|
| 309 |
for (Reference r : listReferences.getReferencesSource()) {
|
|
| 310 |
task.getLogger().info(" - " + r.getIdentifier().substring(16));
|
|
| 311 |
r.getPath(); |
|
| 312 |
} |
|
| 313 |
zip(listOfFilesToOrder, listReferences, destRef); |
|
| 314 |
} |
|
| 315 |
else {
|
|
| 316 |
task.getLogger().log(Level.INFO, "FILE in progress for user : " |
|
| 317 |
+ task.getUser().getIdentifier() + " -> ip :" + getClientInfo().getUpstreamAddress()); |
|
| 318 |
task.getLogger().info("List of files ordered :");
|
|
| 319 |
for (Reference r : listReferences.getReferencesSource()) {
|
|
| 320 |
task.getLogger().info(" - " + r.getIdentifier().substring(16));
|
|
| 321 |
r.getPath(); |
|
| 322 |
} |
|
| 323 |
|
|
| 324 |
Reference ref; |
|
| 325 |
for (Iterator<Reference> iterator = listOfFilesToOrder.iterator(); iterator.hasNext();) {
|
|
| 326 |
Reference sourceRef = iterator.next(); |
|
| 327 |
task.getLogger().log(Level.WARNING, "{0}", sourceRef);
|
|
| 328 |
try {
|
|
| 329 |
ref = new Reference(destRef); |
|
| 330 |
ref.addSegment(sourceRef.getLastSegment()); |
|
| 331 |
OrderResourceUtils.copyFile(sourceRef, ref, getRequest().getClientInfo(), getContext()); |
|
| 332 |
listReferences.addReferenceDest(ref); |
|
| 333 |
} |
|
| 334 |
catch (SitoolsException e) {
|
|
| 335 |
task.getLogger().log(Level.WARNING, "File not copied : " + sourceRef, e); |
|
| 336 |
} |
|
| 337 |
} |
|
| 338 |
} |
|
| 339 |
|
|
| 340 |
task.getLogger().log(Level.INFO, "Number of downloaded files : " + listOfFilesToOrder.size()); |
|
| 341 |
|
|
| 342 |
// set the result in the task |
|
| 343 |
task.setUrlResult(settings.getString(Consts.APP_URL) + settings.getString(Consts.APP_ORDERS_USER_URL) + "/" |
|
| 344 |
+ order.getId()); |
|
| 345 |
|
|
| 346 |
try {
|
|
| 347 |
// copy the indexFile to the destination reference |
|
| 348 |
String orderFileListName = fileName; |
|
| 349 |
if (orderFileListName == null || "".equals(orderFileListName)) {
|
|
| 350 |
orderFileListName = OrderResourceUtils.FILE_LIST_PATTERN.replace("{orderName}", ds.getName());
|
|
| 351 |
orderFileListName = orderFileListName.replace("{timestamp}", formatedDate);
|
|
| 352 |
} |
|
| 353 |
else {
|
|
| 354 |
orderFileListName += "_fileList"; |
|
| 355 |
} |
|
| 356 |
destRef.addSegment(orderFileListName); |
|
| 357 |
destRef.setExtensions("txt");
|
|
| 358 |
Reference urlUserIndex = listReferences.copyToUserStorage(destRef, getContext(), getClientInfo()); |
|
| 359 |
|
|
| 360 |
// add it the order |
|
| 361 |
ArrayList<String> orderedResource = new ArrayList<String>(); |
|
| 362 |
orderedResource.add(urlUserIndex.toString()); |
|
| 363 |
order.setResourceCollection(orderedResource); |
|
| 364 |
order = OrderAPI.updateOrder(order, getContext()); |
|
| 365 |
|
|
| 366 |
} |
|
| 367 |
catch (IOException e) {
|
|
| 368 |
throw new SitoolsException("Error while creating the file index in the userstorage", e);
|
|
| 369 |
} |
|
| 370 |
return null; |
|
| 371 |
|
|
| 372 |
} |
|
| 373 |
|
|
| 374 |
/** |
|
| 375 |
* Create the Zip from the listOfFilesToOrder |
|
| 376 |
* |
|
| 377 |
* @param listOfFilesToOrder |
|
| 378 |
* the list of files to order |
|
| 379 |
* @param listReferences |
|
| 380 |
* the ListReferenceAPI to add some reference |
|
| 381 |
* @param destRef |
|
| 382 |
* the destination reference |
|
| 383 |
* @throws SitoolsException |
|
| 384 |
* if there is an error |
|
| 385 |
*/ |
|
| 386 |
private void zip(List<Reference> listOfFilesToOrder, ListReferencesAPI listReferences, Reference destRef) |
|
| 387 |
throws SitoolsException {
|
|
| 388 |
|
|
| 389 |
String zipFileName = fileName; |
|
| 390 |
if (zipFileName == null || "".equals(zipFileName)) {
|
|
| 391 |
zipFileName = OrderResourceUtils.ZIP_FILE_PATTERN.replace("{orderName}", ds.getName());
|
|
| 392 |
zipFileName = zipFileName.replace("{timestamp}", formatedDate);
|
|
| 393 |
} |
|
| 394 |
|
|
| 395 |
Reference zipRef = new Reference(RIAPUtils.getRiapBase() + settings.getString(Consts.APP_TMP_FOLDER_URL)); |
|
| 396 |
zipRef.addSegment(zipFileName); |
|
| 397 |
zipRef.setExtensions("zip");
|
|
| 398 |
|
|
| 399 |
// create an index and add it to the zip files |
|
| 400 |
Reference ref; |
|
| 401 |
Reference sourceRef; |
|
| 402 |
for (Iterator<Reference> iterator = listOfFilesToOrder.iterator(); iterator.hasNext();) {
|
|
| 403 |
sourceRef = iterator.next(); |
|
| 404 |
ref = new Reference(destRef); |
|
| 405 |
ref.addSegment(sourceRef.getLastSegment()); |
|
| 406 |
listReferences.addReferenceDest(ref); |
|
| 407 |
} |
|
| 408 |
|
|
| 409 |
// copy the indexFile to the destination reference |
|
| 410 |
Reference destRefListFileInZip = new Reference(destRef); |
|
| 411 |
|
|
| 412 |
String orderFileListName = fileName; |
|
| 413 |
if (orderFileListName == null || "".equals(orderFileListName)) {
|
|
| 414 |
orderFileListName = OrderResourceUtils.FILE_LIST_PATTERN.replace("{orderName}", ds.getName());
|
|
| 415 |
orderFileListName = orderFileListName.replace("{timestamp}", formatedDate);
|
|
| 416 |
} |
|
| 417 |
else {
|
|
| 418 |
orderFileListName += "_fileList"; |
|
| 419 |
} |
|
| 420 |
destRefListFileInZip.addSegment(orderFileListName); |
|
| 421 |
destRefListFileInZip.setExtensions("txt");
|
|
| 422 |
try {
|
|
| 423 |
listReferences.copyToUserStorage(destRefListFileInZip, getContext(), getClientInfo()); |
|
| 424 |
listReferences.clearReferencesDest(); |
|
| 425 |
listReferences.addReferenceSource(destRefListFileInZip); |
|
| 426 |
} |
|
| 427 |
catch (IOException e) {
|
|
| 428 |
e.printStackTrace(); |
|
| 429 |
} |
|
| 430 |
|
|
| 431 |
OrderResourceUtils.zipFiles(listOfFilesToOrder, settings.getTmpFolderUrl() + "/" + zipFileName + ".zip", |
|
| 432 |
getRequest().getClientInfo(), getContext()); |
|
| 433 |
destRef.addSegment(zipRef.getLastSegment()); |
|
| 434 |
OrderResourceUtils.copyFile(zipRef, destRef, getRequest().getClientInfo(), getContext()); |
|
| 435 |
OrderResourceUtils.deleteFile(zipRef, getRequest().getClientInfo(), getContext()); |
|
| 436 |
|
|
| 437 |
Reference destZipRef = new Reference(destRef); |
|
| 438 |
listReferences.addReferenceDest(destZipRef); |
|
| 439 |
|
|
| 440 |
destRef.setLastSegment("");
|
|
| 441 |
} |
|
| 442 |
} |
|
| Asynchronous_Download_java_sitools2/PublicOrderResourceFacade.java | ||
|---|---|---|
| 1 |
/******************************************************************************* |
|
| 2 |
* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES |
|
| 3 |
* |
|
| 4 |
* This file is part of SITools2. |
|
| 5 |
* |
|
| 6 |
* SITools2 is free software: you can redistribute it and/or modify |
|
| 7 |
* it under the terms of the GNU General Public License as published by |
|
| 8 |
* the Free Software Foundation, either version 3 of the License, or |
|
| 9 |
* (at your option) any later version. |
|
| 10 |
* |
|
| 11 |
* SITools2 is distributed in the hope that it will be useful, |
|
| 12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 14 |
* GNU General Public License for more details. |
|
| 15 |
* |
|
| 16 |
* You should have received a copy of the GNU General Public License |
|
| 17 |
* along with SITools2. If not, see <http://www.gnu.org/licenses/>. |
|
| 18 |
******************************************************************************/ |
|
| 19 |
package fr.cnes.sitools.resources.order; |
|
| 20 |
|
|
| 21 |
import org.restlet.data.Form; |
|
| 22 |
import org.restlet.ext.wadl.MethodInfo; |
|
| 23 |
import org.restlet.representation.Representation; |
|
| 24 |
import org.restlet.representation.Variant; |
|
| 25 |
|
|
| 26 |
import fr.cnes.sitools.common.resource.SitoolsParameterizedResource; |
|
| 27 |
import fr.cnes.sitools.dataset.DataSetApplication; |
|
| 28 |
import fr.cnes.sitools.dataset.database.common.DataSetExplorerUtil; |
|
| 29 |
import fr.cnes.sitools.tasks.TaskUtils; |
|
| 30 |
|
|
| 31 |
/** |
|
| 32 |
* Facade for PublicOrderResource |
|
| 33 |
* |
|
| 34 |
* |
|
| 35 |
* @author m.gond |
|
| 36 |
*/ |
|
| 37 |
public class PublicOrderResourceFacade extends SitoolsParameterizedResource implements IOrderResource {
|
|
| 38 |
/** |
|
| 39 |
* Description de la ressource |
|
| 40 |
*/ |
|
| 41 |
@Override |
|
| 42 |
public void sitoolsDescribe() {
|
|
| 43 |
setName("PublicOrderResourceFacade");
|
|
| 44 |
setDescription("Resource to order data");
|
|
| 45 |
} |
|
| 46 |
|
|
| 47 |
/** |
|
| 48 |
* Description WADL de la methode POST |
|
| 49 |
* |
|
| 50 |
* @param info |
|
| 51 |
* The method description to update. |
|
| 52 |
*/ |
|
| 53 |
@Override |
|
| 54 |
public void describePost(MethodInfo info) {
|
|
| 55 |
info.setDocumentation("Method to order data from a dataset");
|
|
| 56 |
info.setIdentifier("order");
|
|
| 57 |
addStandardPostOrPutRequestInfo(info); |
|
| 58 |
DataSetExplorerUtil.addDatasetExplorerGetRequestInfo(info); |
|
| 59 |
DataSetApplication application = (DataSetApplication) getApplication(); |
|
| 60 |
DataSetExplorerUtil.addDatasetExplorerGetFilterInfo(info, application.getFilterChained()); |
|
| 61 |
addStandardResponseInfo(info); |
|
| 62 |
addStandardInternalServerErrorInfo(info); |
|
| 63 |
this.addInfo(info); |
|
| 64 |
} |
|
| 65 |
|
|
| 66 |
/** |
|
| 67 |
* Create the order |
|
| 68 |
* |
|
| 69 |
* @param represent |
|
| 70 |
* the {@link Representation} entity
|
|
| 71 |
* @param variant |
|
| 72 |
* The {@link Variant} needed
|
|
| 73 |
* @return a representation |
|
| 74 |
*/ |
|
| 75 |
public Representation orderPost(Representation represent, Variant variant) {
|
|
| 76 |
processBody(); |
|
| 77 |
return TaskUtils.execute(this, variant); |
|
| 78 |
} |
|
| 79 |
|
|
| 80 |
/** |
|
| 81 |
* Create the order |
|
| 82 |
* |
|
| 83 |
* @param variant |
|
| 84 |
* The {@link Variant} needed
|
|
| 85 |
* @return a representation |
|
| 86 |
*/ |
|
| 87 |
public Representation orderGet(Variant variant) {
|
|
| 88 |
return TaskUtils.execute(this, variant); |
|
| 89 |
} |
|
| 90 |
|
|
| 91 |
/** |
|
| 92 |
* process the body and save the request entity {@link Representation}
|
|
| 93 |
*/ |
|
| 94 |
public void processBody() {
|
|
| 95 |
Representation body = this.getRequest().getEntity(); |
|
| 96 |
if (body != null && body.isAvailable() && body.getSize() > 0) {
|
|
| 97 |
Form bodyForm = new Form(body); |
|
| 98 |
getContext().getAttributes().put(TaskUtils.BODY_CONTENT, bodyForm); |
|
| 99 |
} |
|
| 100 |
else {
|
|
| 101 |
getContext().getAttributes().remove(TaskUtils.BODY_CONTENT); |
|
| 102 |
} |
|
| 103 |
} |
|
| 104 |
|
|
| 105 |
} |
|
| Asynchronous_Download_java_sitools2/PublicOrderResourceModel.java | ||
|---|---|---|
| 1 |
/******************************************************************************* |
|
| 2 |
* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES |
|
| 3 |
* |
|
| 4 |
* This file is part of SITools2. |
|
| 5 |
* |
|
| 6 |
* SITools2 is free software: you can redistribute it and/or modify |
|
| 7 |
* it under the terms of the GNU General Public License as published by |
|
| 8 |
* the Free Software Foundation, either version 3 of the License, or |
|
| 9 |
* (at your option) any later version. |
|
| 10 |
* |
|
| 11 |
* SITools2 is distributed in the hope that it will be useful, |
|
| 12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 14 |
* GNU General Public License for more details. |
|
| 15 |
* |
|
| 16 |
* You should have received a copy of the GNU General Public License |
|
| 17 |
* along with SITools2. If not, see <http://www.gnu.org/licenses/>. |
|
| 18 |
******************************************************************************/ |
|
| 19 |
package fr.cnes.sitools.resources.order; |
|
| 20 |
|
|
| 21 |
import java.util.HashSet; |
|
| 22 |
import java.util.Map; |
|
| 23 |
import java.util.Set; |
|
| 24 |
|
|
| 25 |
import fr.cnes.sitools.common.validator.ConstraintViolation; |
|
| 26 |
import fr.cnes.sitools.common.validator.ConstraintViolationLevel; |
|
| 27 |
import fr.cnes.sitools.common.validator.Validator; |
|
| 28 |
import fr.cnes.sitools.dataset.DataSetApplication; |
|
| 29 |
import fr.cnes.sitools.plugins.resources.model.DataSetSelectionType; |
|
| 30 |
import fr.cnes.sitools.plugins.resources.model.ResourceModel; |
|
| 31 |
import fr.cnes.sitools.plugins.resources.model.ResourceParameter; |
|
| 32 |
import fr.cnes.sitools.plugins.resources.model.ResourceParameterType; |
|
| 33 |
import fr.cnes.sitools.tasks.model.TaskResourceModel; |
|
| 34 |
import fr.cnes.sitools.tasks.model.TaskRunTypeAdministration; |
|
| 35 |
|
|
| 36 |
/** |
|
| 37 |
* Model for OrderResource |
|
| 38 |
* |
|
| 39 |
* |
|
| 40 |
* @author m.gond |
|
| 41 |
*/ |
|
| 42 |
public class PublicOrderResourceModel extends TaskResourceModel {
|
|
| 43 |
|
|
| 44 |
/** |
|
| 45 |
* Constructor |
|
| 46 |
*/ |
|
| 47 |
public PublicOrderResourceModel() {
|
|
| 48 |
|
|
| 49 |
super(); |
|
| 50 |
setClassAuthor("Shuo");
|
|
| 51 |
setClassOwner("IAS");
|
|
| 52 |
setClassVersion("0.1");
|
|
| 53 |
setName("PublicOrderResourceModel");
|
|
| 54 |
setDescription("Order resources associated to metadata for public user and save it in public storage. (Can also create a ZIP, TAR or TAR.GZ 'on the fly')");
|
|
| 55 |
/** Resource facade */ |
|
| 56 |
setResourceClassName("fr.cnes.sitools.resources.order.PublicOrderResourceFacade");
|
|
| 57 |
/** Resource d'implémentation */ |
|
| 58 |
setResourceImplClassName("fr.cnes.sitools.resources.order.PublicOrderResource");
|
|
| 59 |
|
|
| 60 |
setRunTypeAdministration(TaskRunTypeAdministration.TASK_DEFAULT_RUN_ASYNC); |
|
| 61 |
|
|
| 62 |
ResourceParameter paramColUrl = new ResourceParameter("colUrl", "Colum containing data url for order",
|
|
| 63 |
ResourceParameterType.PARAMETER_INTERN); |
|
| 64 |
/** Type de paramètre pour lister les colonnes du dataset */ |
|
| 65 |
paramColUrl.setValueType("xs:dataset.columnAlias");
|
|
| 66 |
ResourceParameter param2 = new ResourceParameter("zip",
|
|
| 67 |
"(true or false) If the data needs to be zipped at the end", ResourceParameterType.PARAMETER_USER_INPUT); |
|
| 68 |
param2.setValue("false");
|
|
| 69 |
/** Type de colonne booléen */ |
|
| 70 |
param2.setValueType("xs:boolean");
|
|
| 71 |
ResourceParameter email= new ResourceParameter("Email","Send alert email when download ready",ResourceParameterType.PARAMETER_USER_INPUT);
|
|
| 72 |
email.setValue("");
|
|
| 73 |
email.setValueType("xs:string");
|
|
| 74 |
this.addParam(paramColUrl); |
|
| 75 |
this.addParam(param2); |
|
| 76 |
this.addParam(email); |
|
| 77 |
|
|
| 78 |
this.setApplicationClassName(DataSetApplication.class.getName()); |
|
| 79 |
this.getParameterByName("methods").setValue("POST");
|
|
| 80 |
this.setDataSetSelection(DataSetSelectionType.MULTIPLE); |
|
| 81 |
|
|
| 82 |
// paramètres pour la limitation du nombre de fichiers |
|
| 83 |
ResourceParameter paramMaxWarningThreshold = new ResourceParameter("max_warning_threshold",
|
|
| 84 |
"Maximum number of files allowed to be downloaded before client warning, download is still allowed", |
|
| 85 |
ResourceParameterType.PARAMETER_USER_GUI); |
|
| 86 |
paramMaxWarningThreshold.setValueType("xs:integer");
|
|
| 87 |
|
|
| 88 |
ResourceParameter paramTooManySelectedThreshold = new ResourceParameter("too_many_selected_threshold",
|
|
| 89 |
"Maximum number of files allowed to be downloaded (-1 to set no limit)", ResourceParameterType.PARAMETER_INTERN); |
|
| 90 |
paramTooManySelectedThreshold.setValueType("xs:integer");
|
|
| 91 |
paramTooManySelectedThreshold.setValue("-1");
|
|
| 92 |
|
|
| 93 |
ResourceParameter paramMaxWarningThresholdText = new ResourceParameter("max_warning_threshold_text",
|
|
| 94 |
"Text to display to the user when Warning threshold is reached", ResourceParameterType.PARAMETER_USER_GUI); |
|
| 95 |
paramMaxWarningThresholdText.setValueType("xs:string");
|
|
| 96 |
|
|
| 97 |
ResourceParameter paramTooManySelectedThresholdText = new ResourceParameter("too_many_selected_threshold_text",
|
|
| 98 |
"Text to display to the user when TooMaxySelected threshold is reached", |
|
| 99 |
ResourceParameterType.PARAMETER_USER_GUI); |
|
| 100 |
paramTooManySelectedThresholdText.setValueType("xs:string");
|
|
| 101 |
|
|
| 102 |
this.addParam(paramMaxWarningThreshold); |
|
| 103 |
this.addParam(paramTooManySelectedThreshold); |
|
| 104 |
this.addParam(paramMaxWarningThresholdText); |
|
| 105 |
this.addParam(paramTooManySelectedThresholdText); |
|
| 106 |
|
|
| 107 |
this.getParameterByName("fileName").setValue("dataset_order_" + "${date:yyyy-MM-dd HH_mm_ss}");
|
|
| 108 |
|
|
| 109 |
} |
|
| 110 |
|
|
| 111 |
@Override |
|
| 112 |
public Validator<ResourceModel> getValidator() {
|
|
| 113 |
return new Validator<ResourceModel>() {
|
|
| 114 |
|
|
| 115 |
@Override |
|
| 116 |
public Set<ConstraintViolation> validate(ResourceModel item) {
|
|
| 117 |
Set<ConstraintViolation> constraints = new HashSet<ConstraintViolation>(); |
|
| 118 |
Map<String, ResourceParameter> params = item.getParametersMap(); |
|
| 119 |
ResourceParameter param = params.get("colUrl");
|
|
| 120 |
String value = param.getValue(); |
|
| 121 |
if (value == null || value.equals("")) {
|
|
| 122 |
ConstraintViolation constraint = new ConstraintViolation(); |
|
| 123 |
constraint.setMessage("An attribute of the dataset must be choosen");
|
|
| 124 |
constraint.setLevel(ConstraintViolationLevel.CRITICAL); |
|
| 125 |
constraint.setValueName(param.getName()); |
|
| 126 |
constraints.add(constraint); |
|
| 127 |
} |
|
| 128 |
param = params.get("zip");
|
|
| 129 |
if (param != null) {
|
|
| 130 |
value = param.getValue(); |
|
| 131 |
if (value == null || (!"false".equals(value) && !"true".equals(value))) {
|
|
| 132 |
ConstraintViolation constraint = new ConstraintViolation(); |
|
| 133 |
constraint.setMessage("Must be a boolean");
|
|
| 134 |
constraint.setLevel(ConstraintViolationLevel.CRITICAL); |
|
| 135 |
constraint.setInvalidValue(value); |
|
| 136 |
constraint.setValueName(param.getName()); |
|
| 137 |
constraints.add(constraint); |
|
| 138 |
} |
|
| 139 |
} |
|
| 140 |
param = params.get("too_many_selected_threshold");
|
|
| 141 |
value = param.getValue(); |
|
| 142 |
if (value == null || "".equals(value)) {
|
|
| 143 |
ConstraintViolation constraint = new ConstraintViolation(); |
|
| 144 |
constraint.setMessage("Cannot be null");
|
|
| 145 |
constraint.setLevel(ConstraintViolationLevel.CRITICAL); |
|
| 146 |
constraint.setInvalidValue(value); |
|
| 147 |
constraint.setValueName(param.getName()); |
|
| 148 |
constraints.add(constraint); |
|
| 149 |
} |
|
| 150 |
else {
|
|
| 151 |
try {
|
|
| 152 |
Integer.parseInt(value); |
|
| 153 |
} |
|
| 154 |
catch (NumberFormatException e) {
|
|
| 155 |
ConstraintViolation constraint = new ConstraintViolation(); |
|
| 156 |
constraint.setMessage("Must be an integer value");
|
|
| 157 |
constraint.setLevel(ConstraintViolationLevel.CRITICAL); |
|
| 158 |
constraint.setInvalidValue(value); |
|
| 159 |
constraint.setValueName(param.getName()); |
|
| 160 |
constraints.add(constraint); |
|
| 161 |
} |
|
| 162 |
} |
|
| 163 |
return constraints; |
|
| 164 |
} |
|
| 165 |
}; |
|
| 166 |
} |
|
| 167 |
|
|
| 168 |
} |
|
| Asynchronous_Download_userInterface_sitools2/goToTaskPanel.js | ||
|---|---|---|
| 1 |
/******************************************************************************* |
|
| 2 |
* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES |
|
| 3 |
* |
|
| 4 |
* This file is part of SITools2. |
|
| 5 |
* |
|
| 6 |
* SITools2 is free software: you can redistribute it and/or modify it under the |
|
| 7 |
* terms of the GNU General Public License as published by the Free Software |
|
| 8 |
* Foundation, either version 3 of the License, or (at your option) any later |
|
| 9 |
* version. |
|
| 10 |
* |
|
| 11 |
* SITools2 is distributed in the hope that it will be useful, but WITHOUT ANY |
|
| 12 |
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR |
|
| 13 |
* A PARTICULAR PURPOSE. See the GNU General Public License for more details. |
|
| 14 |
* |
|
| 15 |
* You should have received a copy of the GNU General Public License along with |
|
| 16 |
* SITools2. If not, see <http://www.gnu.org/licenses/>. |
|
| 17 |
******************************************************************************/ |
|
| 18 |
/*global Ext, sitools, i18n, SitoolsDesk, alertFailure, window, loadUrl */ |
|
| 19 |
|
|
| 20 |
Ext.namespace('sitools.user.component.dataviews');
|
|
| 21 |
|
|
| 22 |
/** |
|
| 23 |
* A simple window that displays result of Resource Tasks. |
|
| 24 |
* @class sitools.user.component.dataviews.goToTaskPanel |
|
| 25 |
* @extends Ext.Panel |
|
| 26 |
*/ |
|
| 27 |
sitools.user.component.dataviews.goToTaskPanel = Ext.extend(Ext.Panel, {
|
|
| 28 |
//sitools.user.component.livegrid.goToTaskPanel = Ext.extend(Ext.Window, {
|
|
| 29 |
// modal : true, |
|
| 30 |
width : "500", |
|
| 31 |
buttonAlign : 'left', |
|
| 32 |
layout : 'fit', |
|
| 33 |
initComponent : function () {
|
|
| 34 |
|
|
| 35 |
|
|
| 36 |
|
|
| 37 |
this.mainPanel = this.createNewFormComponent(this.task); |
|
| 38 |
|
|
| 39 |
this.buttons = ["->",/* {
|
|
| 40 |
text : i18n.get('label.goToTask'),
|
|
| 41 |
scope : this, |
|
| 42 |
handler : this.goToTask |
|
| 43 |
},*/ {
|
|
| 44 |
text : i18n.get('label.close'),
|
|
| 45 |
scope : this, |
|
| 46 |
handler : function () {
|
|
| 47 |
this.ownerCt.close(); |
|
| 48 |
} |
|
| 49 |
} ]; |
|
| 50 |
|
|
| 51 |
|
|
| 52 |
this.items = [this.mainPanel]; |
|
| 53 |
|
|
| 54 |
sitools.user.component.dataviews.goToTaskPanel.superclass.initComponent.call(this); |
|
| 55 |
|
|
| 56 |
}, |
|
| 57 |
|
|
| 58 |
refreshTask : function () {
|
|
| 59 |
// var form = this.mainPanel; |
|
| 60 |
var url = this.task.statusUrl; |
|
| 61 |
Ext.Ajax.request({
|
|
| 62 |
url : url, |
|
| 63 |
method : "GET", |
|
| 64 |
scope : this, |
|
| 65 |
success : function (ret) {
|
|
| 66 |
var data = Ext.decode(ret.responseText); |
|
| 67 |
if (!data.success) {
|
|
| 68 |
Ext.Msg.alert(i18n.get('label.warning'), data.message);
|
|
| 69 |
return false; |
|
| 70 |
} |
|
| 71 |
this.task = data.TaskModel; |
|
| 72 |
this.mainPanel = this.createNewFormComponent(this.task); |
|
| 73 |
this.removeAll(); |
|
| 74 |
this.add(this.mainPanel); |
|
| 75 |
this.doLayout(); |
|
| 76 |
}, |
|
| 77 |
failure : alertFailure |
|
| 78 |
}); |
|
| 79 |
}, |
|
| 80 |
|
|
| 81 |
createNewFormComponent : function (task) {
|
|
| 82 |
var html = String.format("<p>Hi, your download task is being processed, we will inform you by email when it is done.</p>");
|
|
| 83 |
html += String.format("<p>For public users, we will send you a link for download in the email.</p>");
|
|
| 84 |
//html += String.format("<p>You can check the progress by clicking the button <b>Go to the task</b> below.</p>");
|
|
| 85 |
html += String.format("<p>For registered users, you can find and manage(delete or download) all your historical download tasks by clicking the <b>Tasks</b> button which located in your user menu.</p>");
|
|
| 86 |
|
|
| 87 |
/* var html = String.format(i18n.get("label.taskLaunched"), task.status);
|
|
| 88 |
html += String.format("<a href='#'>{0}</a><br>", i18n.get("label.detail"));
|
|
| 89 |
|
|
| 90 |
if (!Ext.isEmpty(task.urlResult)) {
|
|
| 91 |
html += "<br>" + String.format(i18n.get("label.taskResult"), task.urlResult);
|
|
| 92 |
html += String.format("<a href='#'>{0}</a><br>", i18n.get("label.result"));
|
|
| 93 |
} |
|
| 94 |
else {
|
|
| 95 |
html += "<br>" + i18n.get("label.refreshTaskWindow");
|
|
| 96 |
html += String.format("<a href='#'>{0}</a><br>", i18n.get("label.refresh"));
|
|
| 97 |
}*/ |
|
| 98 |
|
|
| 99 |
var panel = new Ext.Panel({
|
|
| 100 |
padding: 5, |
|
| 101 |
layout : "fit", |
|
| 102 |
html : html, |
|
| 103 |
listeners : {
|
|
| 104 |
scope : this, |
|
| 105 |
afterrender : function (panel) {
|
|
| 106 |
/*panel.getEl().child('a').on("click", function () {
|
|
| 107 |
this.showTaskDetail(task); |
|
| 108 |
}, this); |
|
| 109 |
var resultOrRefreshLink = panel.getEl().child('a').next('a');
|
|
| 110 |
if (!Ext.isEmpty(task.urlResult)) {
|
|
| 111 |
resultOrRefreshLink.on("click", function () {
|
|
| 112 |
this.showTaskResults(task); |
|
| 113 |
}, this); |
|
| 114 |
} |
|
| 115 |
else {
|
|
| 116 |
resultOrRefreshLink.on("click", function () {
|
|
| 117 |
this.refreshTask(); |
|
| 118 |
}, this); |
|
| 119 |
}*/ |
|
| 120 |
} |
|
| 121 |
} |
|
| 122 |
}); |
|
| 123 |
return panel; |
|
| 124 |
|
|
| 125 |
// var formPanel = new Ext.form.FormPanel({
|
|
| 126 |
// title : i18n.get("label.taskDetails"),
|
|
| 127 |
// padding: 5, |
|
| 128 |
// items : [ {
|
|
| 129 |
// name : 'statusUrl', |
|
| 130 |
// xtype : 'textfield', |
|
| 131 |
// value : task.statusUrl, |
|
| 132 |
// hidden : true |
|
| 133 |
// }, {
|
|
| 134 |
// name : 'status', |
|
| 135 |
// fieldLabel : i18n.get('label.status'),
|
|
| 136 |
// anchor : "100%", |
|
| 137 |
// xtype : 'textfield', |
|
| 138 |
// value : task.status |
|
| 139 |
// }, {
|
|
| 140 |
// name : 'id', |
|
| 141 |
// fieldLabel : i18n.get('label.id'),
|
|
| 142 |
// anchor : "100%", |
|
| 143 |
// xtype : 'textfield', |
|
| 144 |
// value : task.id |
|
| 145 |
// }, {
|
|
| 146 |
// itemValue : task.statusUrl, |
|
| 147 |
// fieldLabel : i18n.get('label.url'),
|
|
| 148 |
// xtype : 'box', |
|
| 149 |
// html : "<a href='#'> " + task.statusUrl + "</a>" |
|
| 150 |
// , |
|
| 151 |
// listeners : {
|
|
| 152 |
// scope : this, |
|
| 153 |
// render : function (cmp) {
|
|
| 154 |
// cmp.getEl().on('click', function () {
|
|
| 155 |
// var jsObj = sitools.user.modules.userSpaceDependencies.svaTasksDetails; |
|
| 156 |
// var componentCfg = {
|
|
| 157 |
// sva : task |
|
| 158 |
// }; |
|
| 159 |
// var windowConfig = {
|
|
| 160 |
// id : "taskStatusDetails", |
|
| 161 |
// title : i18n.get("label.taskDetails") + ":" + task.id
|
|
| 162 |
// }; |
|
| 163 |
// SitoolsDesk.addDesktopWindow(windowConfig, componentCfg, jsObj); |
|
| 164 |
// }); |
|
| 165 |
// } |
|
| 166 |
// } |
|
| 167 |
// } |
|
| 168 |
// ] |
|
| 169 |
// }); |
|
| 170 |
// |
|
| 171 |
// if (!Ext.isEmpty(task.urlResult)) {
|
|
| 172 |
// var item = new Ext.BoxComponent({
|
|
| 173 |
// itemValue : task.urlResult, |
|
| 174 |
// fieldLabel : i18n.get('label.result'),
|
|
| 175 |
// html : "<a href='#'> " + task.urlResult + "</a>", |
|
| 176 |
// listeners : {
|
|
| 177 |
// scope : this, |
|
| 178 |
// render : function (cmp) {
|
|
| 179 |
// cmp.getEl().on('click', function () {
|
|
| 180 |
// var orderUrl = loadUrl.get('APP_URL') + loadUrl.get('APP_ORDERS_USER_URL');
|
|
| 181 |
// if (cmp.itemValue.indexOf(orderUrl) != -1) {
|
|
| 182 |
// this._showOrderDetails(cmp.itemValue); |
|
| 183 |
// } else if (cmp.itemValue.indexOf("/records") != -1) {
|
|
| 184 |
// this._showDatasetDetails(cmp.itemValue); |
|
| 185 |
// } |
|
| 186 |
// else {
|
|
| 187 |
// window.open(cmp.itemValue); |
|
| 188 |
// } |
|
| 189 |
// }, this); |
|
| 190 |
// } |
|
| 191 |
// } |
|
| 192 |
// }); |
|
| 193 |
// formPanel.add(item); |
|
| 194 |
// } |
|
| 195 |
// |
|
| 196 |
// return formPanel; |
|
| 197 |
|
|
| 198 |
}, |
|
| 199 |
|
|
| 200 |
/** |
|
| 201 |
* Handler of the button goToTask. |
|
| 202 |
* Open the home Module Window with the taskPanel opened. |
|
| 203 |
*/ |
|
| 204 |
goToTask : function () {
|
|
| 205 |
this.ownerCt.close(); |
|
| 206 |
var jsObj = sitools.user.component.entete.userProfile.tasks; |
|
| 207 |
var windowConfig = {
|
|
| 208 |
title : i18n.get('label.Tasks'),
|
|
| 209 |
saveToolbar : false, |
|
| 210 |
iconCls : "tasks" |
|
| 211 |
}; |
|
| 212 |
SitoolsDesk.addDesktopWindow(windowConfig, {}, jsObj, true);
|
|
| 213 |
|
|
| 214 |
}, |
|
| 215 |
/** |
|
| 216 |
* Open a sitools.user.component.entete.userProfile.orderProp window. |
|
| 217 |
* @param {String} url the Url to request the task.
|
|
| 218 |
*/ |
|
| 219 |
_showOrderDetails : function (url) {
|
|
| 220 |
Ext.Ajax.request({
|
|
| 221 |
url : url, |
|
| 222 |
method : 'GET', |
|
| 223 |
scope : this, |
|
| 224 |
success : function (ret) {
|
|
| 225 |
var data = Ext.decode(ret.responseText); |
|
| 226 |
if (!data.success) {
|
|
| 227 |
Ext.Msg.alert(i18n.get('label.warning'), data.message);
|
|
| 228 |
return false; |
|
| 229 |
} |
|
| 230 |
var rec = new Ext.data.Record(data.order); |
|
| 231 |
var jsObj = sitools.user.component.entete.userProfile.orderProp; |
|
| 232 |
var componentCfg = {
|
|
| 233 |
action : 'detail', |
|
| 234 |
orderRec : rec |
|
| 235 |
}; |
|
| 236 |
var title = i18n.get('label.details') + " : ";
|
|
| 237 |
title += rec.data.userId; |
|
| 238 |
title += " " + i18n.get('label.the');
|
|
| 239 |
title += " " + rec.data.dateOrder; |
|
| 240 |
|
|
| 241 |
var windowConfig = {
|
|
| 242 |
id : "showDataDetailId", |
|
| 243 |
title : title, |
|
| 244 |
specificType : "dataDetail", |
|
| 245 |
iconCls : "dataDetail" |
|
| 246 |
}; |
|
| 247 |
SitoolsDesk.addDesktopWindow(windowConfig, componentCfg, jsObj); |
|
| 248 |
}, |
|
| 249 |
failure : alertFailure |
|
| 250 |
}); |
|
| 251 |
|
|
| 252 |
}, |
|
| 253 |
/** |
|
| 254 |
* Only in NoSql, open a dataset view |
|
| 255 |
* @param {} url
|
|
| 256 |
*/ |
|
| 257 |
_showDatasetDetails : function (url) {
|
|
| 258 |
var urlDataset = url.substring(0, url.indexOf("/records"));
|
|
| 259 |
Ext.Ajax.request({
|
|
| 260 |
url : urlDataset, |
|
| 261 |
method : 'GET', |
|
| 262 |
scope : this, |
|
| 263 |
success : function (ret) {
|
|
| 264 |
var data = Ext.decode(ret.responseText); |
|
| 265 |
if (!data.success) {
|
|
| 266 |
Ext.Msg.alert(i18n.get('label.warning'), data.message);
|
|
| 267 |
return false; |
|
| 268 |
} |
|
| 269 |
var dataset = new Ext.data.Record(data.dataset).data; |
|
| 270 |
|
|
| 271 |
var windowConfig = {
|
|
| 272 |
title : i18n.get('label.dataTitle') + " : " + dataset.name,
|
|
| 273 |
datasetName : dataset.name, |
|
| 274 |
datasetDescription : dataset.description, |
|
| 275 |
type : "data", |
|
| 276 |
saveToolbar : true, |
|
| 277 |
toolbarItems : [], |
|
| 278 |
iconCls : "dataDetail" |
|
| 279 |
}; |
|
| 280 |
|
|
| 281 |
//open the dataView according to the dataset Configuration. |
|
| 282 |
var javascriptObject = eval(dataset.datasetView.jsObject); |
|
| 283 |
//add the toolbarItems configuration |
|
| 284 |
Ext.apply(windowConfig, {
|
|
| 285 |
id : "data" + dataset.datasetId |
|
| 286 |
}); |
|
| 287 |
var componentCfg = {
|
|
| 288 |
dataUrl : dataset.sitoolsAttachementForUsers, |
|
| 289 |
datasetId : dataset.id, |
|
| 290 |
datasetCm : dataset.columnModel, |
|
| 291 |
datasetName : dataset.name, |
|
| 292 |
dictionaryMappings : dataset.dictionaryMappings, |
|
| 293 |
datasetViewConfig : dataset.datasetViewConfig, |
|
| 294 |
preferencesPath : "/" + dataset.name, |
|
| 295 |
preferencesFileName : "datasetView" |
|
| 296 |
}; |
|
| 297 |
|
|
| 298 |
SitoolsDesk.addDesktopWindow(windowConfig, componentCfg, javascriptObject); |
|
| 299 |
|
|
| 300 |
}, |
|
| 301 |
failure : alertFailure |
|
| 302 |
}); |
|
| 303 |
|
|
| 304 |
}, |
|
| 305 |
/** |
|
| 306 |
* Opens a sitools.user.modules.userSpaceDependencies.svaTasksDetails window to see the task Details. |
|
| 307 |
* @param {} task
|
|
| 308 |
*/ |
|
| 309 |
showTaskDetail : function (task) {
|
|
| 310 |
var jsObj = sitools.user.component.entete.userProfile.tasksDetails; |
|
| 311 |
var componentCfg = {
|
|
| 312 |
sva : task |
|
| 313 |
}; |
|
| 314 |
var windowConfig = {
|
|
| 315 |
id : "taskStatusDetails", |
|
| 316 |
title : i18n.get("label.taskDetails") + ":" + task.id,
|
|
| 317 |
iconCls : "dataDetail" |
|
| 318 |
}; |
|
| 319 |
SitoolsDesk.addDesktopWindow(windowConfig, componentCfg, jsObj); |
|
| 320 |
}, |
|
| 321 |
/** |
|
| 322 |
* parse the task.urlResult to see if this is an Specialized resource (noSQl or Order). |
|
| 323 |
* If not, open a new Window to get the result of the resource. |
|
| 324 |
* @param {} task
|
|
| 325 |
*/ |
|
| 326 |
showTaskResults : function (task) {
|
|
| 327 |
var orderUrl = loadUrl.get('APP_URL') + loadUrl.get('APP_ORDERS_USER_URL');
|
|
| 328 |
if (task.urlResult.indexOf(orderUrl) != -1) {
|
|
| 329 |
this._showOrderDetails(task.urlResult); |
|
| 330 |
} else if (task.urlResult.indexOf("/records") != -1) {
|
|
| 331 |
this._showDatasetDetails(task.urlResult); |
|
| 332 |
} |
|
| 333 |
else {
|
|
| 334 |
window.open(task.urlResult); |
|
| 335 |
} |
|
| 336 |
}, |
|
| 337 |
/** |
|
| 338 |
* Method called when trying to show this component with fixed navigation |
|
| 339 |
* |
|
| 340 |
* @param {sitools.user.component.viewDataDetail} me the dataDetail view
|
|
| 341 |
* @param {} config config options
|
|
| 342 |
* @returns |
|
| 343 |
*/ |
|
| 344 |
showMeInFixedNav : function (me, config) {
|
|
| 345 |
Ext.apply(config.windowSettings, {
|
|
| 346 |
width : config.windowSettings.winWidth || DEFAULT_WIN_WIDTH, |
|
| 347 |
height : config.windowSettings.winHeight || DEFAULT_WIN_HEIGHT |
|
| 348 |
}); |
|
| 349 |
SitoolsDesk.openModalWindow(me, config); |
|
| 350 |
}, |
|
| 351 |
/** |
|
| 352 |
* Method called when trying to show this component with Desktop navigation |
|
| 353 |
* |
|
| 354 |
* @param {sitools.user.component.viewDataDetail} me the dataDetail view
|
|
| 355 |
* @param {} config config options
|
|
| 356 |
* @returns |
|
| 357 |
*/ |
|
| 358 |
showMeInDesktopNav : function (me, config) {
|
|
| 359 |
Ext.apply(config.windowSettings, {
|
|
| 360 |
width : config.windowSettings.winWidth || DEFAULT_WIN_WIDTH, |
|
| 361 |
height : config.windowSettings.winHeight || DEFAULT_WIN_HEIGHT |
|
| 362 |
}); |
|
| 363 |
SitoolsDesk.openModalWindow(me, config); |
|
| 364 |
} |
|
| 365 |
|
|
| 366 |
|
|
| 367 |
}); |
|
| 368 |
|
|
| Asynchronous_Download_userInterface_sitools2/resourcePluginParamsPanel.js | ||
|---|---|---|
| 1 |
/******************************************************************************* |
|
| 2 |
* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES |
|
| 3 |
* |
|
| 4 |
* This file is part of SITools2. |
|
| 5 |
* |
|
| 6 |
* SITools2 is free software: you can redistribute it and/or modify it under the |
|
| 7 |
* terms of the GNU General Public License as published by the Free Software |
|
| 8 |
* Foundation, either version 3 of the License, or (at your option) any later |
|
| 9 |
* version. |
|
| 10 |
* |
|
| 11 |
* SITools2 is distributed in the hope that it will be useful, but WITHOUT ANY |
|
| 12 |
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR |
|
| 13 |
* A PARTICULAR PURPOSE. See the GNU General Public License for more details. |
|
| 14 |
* |
|
| 15 |
* You should have received a copy of the GNU General Public License along with |
|
| 16 |
* SITools2. If not, see <http://www.gnu.org/licenses/>. |
|
| 17 |
******************************************************************************/ |
|
| 18 |
/*global Ext, sitools, i18n, SitoolsDesk */ |
|
| 19 |
|
|
| 20 |
Ext.namespace('sitools.user.component.dataviews');
|
|
| 21 |
/** |
|
| 22 |
* @cfg {Ext.menu.menu} contextMenu the contextMenu that call the plugin and will execute onResourceCallClick method
|
|
| 23 |
* @cfg {Ext.data.Record} resource the resource record
|
|
| 24 |
* @cfg {string} url the base url of the resource
|
|
| 25 |
* @cfg {string} methods the methods allowed with the format method1|method2|...|methodN
|
|
| 26 |
* @cfg {string} runType the runTypeUserInput defined in the resource
|
|
| 27 |
* @cfg {boolean} withSelection true if there was a selection, false otherwise
|
|
| 28 |
* @cfg {Array} parameters the parameters
|
|
| 29 |
* @class sitools.user.component.dataviews.resourcePluginParamsPanel |
|
| 30 |
* @extends Ext.Window |
|
| 31 |
*/ |
|
| 32 |
sitools.user.component.dataviews.resourcePluginParamsPanel = Ext.extend(Ext.Panel, {
|
|
| 33 |
//sitools.user.component.livegrid.resourcePluginParamsWindow = Ext.extend(Ext.Window, {
|
|
| 34 |
width : "450", |
|
| 35 |
|
|
| 36 |
showMethod : false, |
|
| 37 |
defaultMethod : "", |
|
| 38 |
showRunType : false, |
|
| 39 |
initComponent : function () {
|
|
| 40 |
var methodsArray = this.methods.split("|");
|
|
| 41 |
this.showMethod = methodsArray.length > 1; |
|
| 42 |
this.defaultMethod = methodsArray[0]; |
|
| 43 |
|
|
| 44 |
this.methodsStore = new Ext.data.ArrayStore({
|
|
| 45 |
fields: ["method"], |
|
| 46 |
idIndex: 0 |
|
| 47 |
}); |
|
| 48 |
|
|
| 49 |
Ext.each(methodsArray, function (item, index) {
|
|
| 50 |
this.methodsStore.add(new Ext.data.Record({
|
|
| 51 |
method : item |
|
| 52 |
})); |
|
| 53 |
}, this); |
|
| 54 |
|
|
| 55 |
var formCommonParametersFields = []; |
|
| 56 |
var comboMethod = new Ext.form.ComboBox({
|
|
| 57 |
xtype : 'combo', |
|
| 58 |
mode : 'local', |
|
| 59 |
triggerAction : 'all', |
|
| 60 |
editable : false, |
|
| 61 |
name : 'method', |
|
| 62 |
fieldLabel : i18n.get('label.method'),
|
|
| 63 |
width : 100, |
|
| 64 |
store : this.methodsStore, |
|
| 65 |
valueField : 'method', |
|
| 66 |
displayField : 'method', |
|
| 67 |
anchor : "100%", |
|
| 68 |
value : this.defaultMethod, |
|
| 69 |
forceSelection : true |
|
| 70 |
}); |
|
| 71 |
this.items = []; |
|
| 72 |
if (this.showMethod) {
|
|
| 73 |
formCommonParametersFields.push(comboMethod); |
|
| 74 |
this.formParams = new Ext.form.FormPanel({
|
|
| 75 |
padding: 5, |
|
| 76 |
// title : "Request parameters", |
|
| 77 |
items : [{
|
|
| 78 |
xtype : 'fieldset', |
|
| 79 |
title : i18n.get("label.commonParameters"),
|
|
| 80 |
items : formCommonParametersFields |
|
| 81 |
}] |
|
| 82 |
}); |
|
| 83 |
|
|
| 84 |
this.items.push(this.formParams); |
|
| 85 |
} |
|
| 86 |
|
|
| 87 |
var userInputParams = []; |
|
| 88 |
this.user = projectGlobal.user || {
|
|
| 89 |
firstName : "public", |
|
| 90 |
identifier : "public", |
|
| 91 |
email : " " |
|
| 92 |
}; |
|
| 93 |
|
|
| 94 |
Ext.each(this.resource.parameters, function (value, index) {
|
|
| 95 |
if (value.type == "PARAMETER_USER_INPUT" && value.userUpdatable) {
|
|
| 96 |
if(value.name == "Email" && this.user.identifier != "public"){
|
|
| 97 |
//if user is not public donnot show email input field |
|
| 98 |
}else{
|
|
| 99 |
var item = this.buildFormItemFromParam(value); |
|
| 100 |
userInputParams.push(item); |
|
| 101 |
if (value.name == "runTypeUserInput") {
|
|
| 102 |
this.showRunType = true; |
|
| 103 |
} |
|
| 104 |
|
|
| 105 |
} |
|
| 106 |
} |
|
| 107 |
}, this); |
|
| 108 |
|
|
| 109 |
if (!Ext.isEmpty(userInputParams)) {
|
|
| 110 |
this.formParamsUserInput = new Ext.form.FormPanel({
|
|
| 111 |
padding: 5, |
|
| 112 |
labelWidth : 150, |
|
| 113 |
items : {
|
|
| 114 |
xtype : 'fieldset', |
|
| 115 |
title : i18n.get("label.specificParameter"),
|
|
| 116 |
items : userInputParams |
|
| 117 |
} |
|
| 118 |
}); |
|
| 119 |
this.items.push(this.formParamsUserInput); |
|
| 120 |
} |
|
| 121 |
|
|
| 122 |
this.buttons = [{
|
|
| 123 |
text : i18n.get('label.submit'),
|
|
| 124 |
scope : this, |
|
| 125 |
handler : this.onCall |
|
| 126 |
}, {
|
|
| 127 |
text : i18n.get('label.cancel'),
|
|
| 128 |
scope : this, |
|
| 129 |
handler : function () {
|
|
| 130 |
this.ownerCt.close(); |
|
| 131 |
this.callback.call(undefined, false); |
|
| 132 |
} |
|
| 133 |
}]; |
|
| 134 |
sitools.user.component.dataviews.resourcePluginParamsPanel.superclass.initComponent.call(this); |
|
| 135 |
}, |
|
| 136 |
|
|
| 137 |
onCall : function () {
|
|
| 138 |
var method; |
|
| 139 |
if (this.showMethod) {
|
|
| 140 |
var form = this.formParams.getForm(); |
|
| 141 |
method = form.findField("method").getValue();
|
|
| 142 |
} |
|
| 143 |
else {
|
|
| 144 |
method = this.defaultMethod; |
|
| 145 |
} |
|
| 146 |
|
|
| 147 |
var runTypeUserInput; |
|
| 148 |
if (this.showRunType) {
|
|
| 149 |
runTypeUserInput = this.formParamsUserInput.getForm().findField("runTypeUserInput").getValue();
|
|
| 150 |
} |
|
| 151 |
else {
|
|
| 152 |
runTypeUserInput = this.runType; |
|
| 153 |
} |
|
| 154 |
var limit; |
|
| 155 |
|
|
| 156 |
var userParameters = {};
|
|
| 157 |
if (!Ext.isEmpty(this.formParamsUserInput)) {
|
|
| 158 |
var formParams = this.formParamsUserInput.getForm(); |
|
| 159 |
Ext.iterate(formParams.getValues(), function (key, value) {
|
|
| 160 |
userParameters[key] = value; |
|
| 161 |
}); |
|
| 162 |
} |
|
| 163 |
if(userParameters["Email"] == ""){
|
|
| 164 |
Ext.Msg.alert("Email error","Please insert an email address which will be used to inform you with the download link.");
|
|
| 165 |
return false; |
|
| 166 |
} |
|
| 167 |
Ext.each(this.parameters, function (param) {
|
|
| 168 |
if (param.type == "PARAMETER_IN_QUERY") {
|
|
| 169 |
userParameters[param.name] = param.value; |
|
| 170 |
} |
|
| 171 |
}); |
|
| 172 |
|
|
| 173 |
this.contextMenu.onResourceCallClick(this.resource, this.url, method, runTypeUserInput, limit, userParameters, this.postParameter, this.callback); |
|
| 174 |
this.ownerCt.close(); |
|
| 175 |
}, |
|
| 176 |
buildFormItemFromParam : function (value, userInputParams) {
|
|
| 177 |
var valueType = value.valueType; |
|
| 178 |
var item = {};
|
|
| 179 |
//specific case for boolean |
|
| 180 |
if (valueType.indexOf("xs:boolean") != -1) {
|
|
| 181 |
valueType = "xs:enum[true,false]"; |
|
| 182 |
} |
|
| 183 |
if (valueType.indexOf("xs:enum") != -1) {
|
|
| 184 |
var enumeration = valueType.split("[");
|
|
| 185 |
enumeration = enumeration[1].split("]");
|
|
| 186 |
enumeration = enumeration[0].split(",");
|
|
| 187 |
|
|
| 188 |
var multiple = false; |
|
| 189 |
if (valueType.indexOf("xs:enum-multiple") >= 0 || valueType.indexOf("xs:enum-editable-multiple") >= 0) {
|
|
| 190 |
multiple = true; |
|
| 191 |
} |
|
| 192 |
|
|
| 193 |
var storeItems = []; |
|
| 194 |
for (var i = 0; i < enumeration.length; i++) {
|
|
| 195 |
var tmp = enumeration[i].trim(); |
|
| 196 |
storeItems.push([ tmp, tmp]); |
|
| 197 |
} |
|
| 198 |
var store = new Ext.data.ArrayStore({
|
|
| 199 |
fields : ['value', 'text'], |
|
| 200 |
data : storeItems, |
|
| 201 |
valueField : 'value', |
|
| 202 |
displayField : 'text' |
|
| 203 |
}); |
|
| 204 |
|
|
| 205 |
if (multiple) {
|
|
| 206 |
item = {
|
|
| 207 |
store : store, |
|
| 208 |
name : value.name, |
|
| 209 |
xtype : "multiselect", |
|
| 210 |
values : value.value, |
|
| 211 |
delimiter : '|', |
|
| 212 |
fieldLabel : value.name, |
|
| 213 |
width : 235, |
|
| 214 |
tooltip : value.description |
|
| 215 |
}; |
|
| 216 |
} |
|
| 217 |
else {
|
|
| 218 |
item = {
|
|
| 219 |
store : store, |
|
| 220 |
name : value.name, |
|
| 221 |
xtype : "combo", |
|
| 222 |
value : value.value, |
|
| 223 |
valueField : "value", |
|
| 224 |
displayField : "text", |
|
| 225 |
mode: 'local', |
|
| 226 |
fieldLabel : value.name, |
|
| 227 |
triggerAction : 'all', |
|
| 228 |
selectOnFocus : true, |
|
| 229 |
editable : false, |
|
| 230 |
anchor : "100%", |
|
| 231 |
tooltip : value.description |
|
| 232 |
}; |
|
| 233 |
} |
|
| 234 |
} |
|
| 235 |
else {
|
|
| 236 |
item = {
|
|
| 237 |
name : value.name, |
|
| 238 |
xtype : 'textfield', |
|
| 239 |
value : value.value, |
|
| 240 |
fieldLabel : value.name, |
|
| 241 |
anchor : "100%", |
|
| 242 |
tooltip : value.description |
|
| 243 |
}; |
|
| 244 |
} |
|
| 245 |
return item; |
|
| 246 |
}, |
|
| 247 |
/** |
|
| 248 |
* Method called when trying to show this component with fixed navigation |
|
| 249 |
* |
|
| 250 |
* @param {sitools.user.component.viewDataDetail} me the dataDetail view
|
|
| 251 |
* @param {} config config options
|
|
| 252 |
* @returns |
|
| 253 |
*/ |
|
| 254 |
showMeInFixedNav : function (me, config) {
|
|
| 255 |
Ext.apply(config.windowSettings, {
|
|
| 256 |
width : config.windowSettings.winWidth || DEFAULT_WIN_WIDTH, |
|
| 257 |
height : config.windowSettings.winHeight || DEFAULT_WIN_HEIGHT |
|
| 258 |
}); |
|
| 259 |
SitoolsDesk.openModalWindow(me, config); |
|
| 260 |
}, |
|
| 261 |
/** |
|
| 262 |
* Method called when trying to show this component with Desktop navigation |
|
| 263 |
* |
|
| 264 |
* @param {sitools.user.component.viewDataDetail} me the dataDetail view
|
|
| 265 |
* @param {} config config options
|
|
| 266 |
* @returns |
|
| 267 |
*/ |
|
| 268 |
showMeInDesktopNav : function (me, config) {
|
|
| 269 |
Ext.apply(config.windowSettings, {
|
|
| 270 |
width : config.windowSettings.winWidth || DEFAULT_WIN_WIDTH, |
|
| 271 |
height : config.windowSettings.winHeight || DEFAULT_WIN_HEIGHT |
|
| 272 |
}); |
|
| 273 |
SitoolsDesk.openModalWindow(me, config); |
|
| 274 |
} |
|
| 275 |
|
|
| 276 |
}); |
|
| Enhanced_Node_Editor_adminInterface/GraphsNodeWin.js | ||
|---|---|---|
| 1 |
/*************************************** |
|
| 2 |
* Copyright 2010-2014 CNES - CENTRE NATIONAL d'ETUDES SPATIALES |
|
| 3 |
* |
|
| 4 |
* This file is part of SITools2. |
|
| 5 |
* |
|
| 6 |
* SITools2 is free software: you can redistribute it and/or modify |
|
| 7 |
* it under the terms of the GNU General Public License as published by |
|
| 8 |
* the Free Software Foundation, either version 3 of the License, or |
|
| 9 |
* (at your option) any later version. |
|
| 10 |
* |
|
| 11 |
* SITools2 is distributed in the hope that it will be useful, |
|
| 12 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 14 |
* GNU General Public License for more details. |
|
| 15 |
* |
|
| 16 |
* You should have received a copy of the GNU General Public License |
|
| 17 |
* along with SITools2. If not, see <http://www.gnu.org/licenses/>. |
|
| 18 |
***************************************/ |
|
| 19 |
/*global Ext, sitools, ID, i18n, document, showResponse, alertFailure, LOCALE, ImageChooser, |
|
| 20 |
showHelp*/ |
|
| 21 |
Ext.namespace('sitools.component.projects');
|
|
| 22 |
|
|
| 23 |
Ext.define('sitools.admin.graphs.GraphsNodeWin', {
|
|
| 24 |
extend : 'Ext.Window', |
|
| 25 |
width : 350, |
|
| 26 |
modal : true, |
|
| 27 |
closable : false, |
|
| 28 |
|
|
| 29 |
initComponent : function () {
|
|
| 30 |
projectId = this.projectId; |
|
| 31 |
this.title = i18n.get('label.nodeDescription');
|
|
| 32 |
/* paramétres du formulaire */ |
|
| 33 |
this.itemsForm = [{
|
|
| 34 |
fieldLabel : i18n.get('label.name'),
|
|
| 35 |
name : 'name', |
|
| 36 |
anchor : '100%', |
|
| 37 |
allowBlank : false |
|
| 38 |
}, {
|
|
| 39 |
fieldLabel : i18n.get('label.description'),
|
|
| 40 |
name : 'description', |
|
| 41 |
anchor : '100%' |
|
| 42 |
}, {
|
|
| 43 |
xtype : 'sitoolsSelectImage', |
|
| 44 |
name : 'image', |
|
| 45 |
fieldLabel : i18n.get('label.image'),
|
|
| 46 |
anchor : '100%', |
|
| 47 |
growMax : 400 |
|
| 48 |
},{
|
|
| 49 |
xtype: 'button', |
|
| 50 |
id: 'linktodataset', |
|
| 51 |
text: '<span style="">Link to a dataset</span>', |
|
| 52 |
anchor: '65%', |
|
| 53 |
margin: '0 5% 0 0', |
|
| 54 |
handler: function() {
|
|
| 55 |
up = Ext.create("sitools.admin.graphs.GraphsDatasetWin", {
|
|
| 56 |
graphTree : true, |
|
| 57 |
url : loadUrl.get('APP_URL') + '/projects/' + projectId + '?media=json',
|
|
| 58 |
mode : 'link', |
|
| 59 |
form : form |
|
| 60 |
}); |
|
| 61 |
up.show(this); |
|
| 62 |
|
|
| 63 |
} |
|
| 64 |
}, {
|
|
| 65 |
xtype: 'button', |
|
| 66 |
id: 'unlinkbutton', |
|
| 67 |
text: '<span style="">Unlink</span>', |
|
| 68 |
disabled:true, |
|
| 69 |
anchor: '35%', |
|
| 70 |
margin: '0 0 0 5%', |
|
| 71 |
handler: function() {
|
|
| 72 |
Ext.getCmp('unlinkbutton').setDisabled(true);
|
|
| 73 |
form.findField('nbRecord').setValue('');
|
|
| 74 |
form.findField('datasetURL').setValue('');
|
|
| 75 |
Ext.getCmp('datatablecheckbox').setValue(false);
|
|
| 76 |
Ext.getCmp('queryformcheckbox').setValue(false);
|
|
| 77 |
Ext.getCmp('datatablecheckbox').setDisabled(true);
|
|
| 78 |
Ext.getCmp('queryformcheckbox').setDisabled(true);
|
|
| 79 |
} |
|
| 80 |
},{
|
|
| 81 |
name : 'nbRecord', |
|
| 82 |
fieldLabel : 'Number of records', |
|
| 83 |
readOnly: true, |
|
| 84 |
cls: 'x-item-disabled', |
|
| 85 |
anchor : '100%' |
|
| 86 |
},{
|
|
| 87 |
name : 'datasetURL', |
|
| 88 |
fieldLabel : 'Dataset URL', |
|
| 89 |
readOnly: true, |
|
| 90 |
cls: 'x-item-disabled', |
|
| 91 |
anchor : '100%' |
|
| 92 |
}, {
|
|
| 93 |
xtype: 'checkboxfield', |
|
| 94 |
boxLabel: 'Data table', |
|
| 95 |
name: 'datatable', |
|
| 96 |
width: '40%', |
|
| 97 |
margin: '0 10% 0 10%', |
|
| 98 |
disabled: true, |
|
| 99 |
id: 'datatablecheckbox' |
|
| 100 |
}, {
|
|
Also available in: Unified diff
some modif