private String getPictureInfo( String parameter, Picture picture, PicturePB pb, JPEGMetadataHandler jpegHandler, FileMetadataHandler fileHandler) { return ServletParameterHelper.replaceDynamicParameters( parameter, new PictureParameterStorage(picture.getFile(), picture, pb, jpegHandler, fileHandler)); }
protected void executeLogic( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { SelectPictureFB fb = (SelectPictureFB) form; Integer virtualGalleryId = fb.getGallery(); setVirtualGalleryId(request, virtualGalleryId); Gallery gallery = GalleryHelper.getGallery(getEnvironment(), virtualGalleryId); if (gallery == null) { saveErrors(request, Arrays.asList(new String[] {"gallery.gallery.gallery-not-found"})); return; } setGallery(request, gallery); String language = fb.getLanguage(); if (StringUtil.asNull(language) == null) { language = request.getLocale().getLanguage(); } boolean useEnglish = !language.equals( getEnvironment().getConfigurableResources().getParameter("nativelanguage")); Integer galleryId = GalleryHelper.getGalleryId(gallery); setGalleryId(request, galleryId); Integer categoryId = fb.getCategory(); setCategoryId(request, categoryId); LOG.debug("Search pictures: " + fb.getGallery() + "," + fb.getCategory()); initRequestParameters(request); Collection categories = getCategories(request, form); Collection picturesAllowed = getPictures(request, form); QueryFilter filter; Integer max = fb.getMax(); if (max == null) { if (gallery.getNoOfCols() != null && gallery.getNoOfCols().intValue() > 0 && gallery.getNoOfRows() != null && gallery.getNoOfRows().intValue() > 0) { max = new Integer(gallery.getNoOfCols().intValue() * gallery.getNoOfRows().intValue()); } } if (fb.getStart() != null && max != null && max.intValue() != 0) { if (picturesAllowed != null) { if (categories != null) { filter = new QueryFilter(getCategoryTreeFilter(request) + "andpicturelist" + "withlimit"); filter.setAttribute("categories", categories); } else { filter = new QueryFilter(getAllFilter(request) + "andpicturelist" + "withlimit"); } filter.setAttribute("pictures", picturesAllowed); } else { if (categories != null) { filter = new QueryFilter(getCategoryTreeFilter(request) + "withlimit"); filter.setAttribute("categories", categories); } else { filter = new QueryFilter(getAllFilter(request) + "withlimit"); } } filter.setAttribute("start", fb.getStart()); if (max != null) { filter.setAttribute("max", max); } } else { if (picturesAllowed != null) { if (categories != null) { filter = new QueryFilter(getCategoryTreeFilter(request) + "andpicturelist"); filter.setAttribute("categories", categories); } else { filter = new QueryFilter(getAllFilter(request) + "andpicturelist"); } filter.setAttribute("pictures", picturesAllowed); } else { if (categories != null) { filter = new QueryFilter(getCategoryTreeFilter(request)); filter.setAttribute("categories", categories); } else { filter = new QueryFilter(getAllFilter(request)); } } } filter.setAttribute("gallery", galleryId); filter.setOrderName(gallery.getSortOrder()); setFilterAttributes(request, form, filter); EntityInterface[] entities = new EntityInterface[0]; if (picturesAllowed == null || (picturesAllowed != null && picturesAllowed.size() > 0)) { entities = getEnvironment().getEntityStorageFactory().getStorage("gallery-picture").search(filter); } String username = gallery.getUsername(); // String username = fb.getUser(); // if (username == null || username.length() == 0) { // username = request.getRemoteUser(); // } filter = new QueryFilter("allforuser"); filter.setAttribute("username", username); EntityInterface[] storageEntities = getEnvironment() .getEntityStorageFactory() .getStorage("gallery-picturestorage") .search(filter); if (gallery.getMaxWidth() != null && gallery.getMaxWidth().intValue() > 0) { filter = new QueryFilter("all-smaller-than"); filter.setAttribute("width", gallery.getMaxWidth()); } else { filter = new QueryFilter("all"); } EntityInterface[] resolutionEntities = getEnvironment().getEntityStorageFactory().getStorage("gallery-resolution").search(filter); ResolutionPB[] resolutionsPB = null; Integer defaultResolution = null; if (resolutionEntities.length > 0) { for (int i = 0; i < resolutionEntities.length; i++) { if (((Resolution) resolutionEntities[i]) .getId() .equalsIgnoreCase(gallery.getDefaultResolution())) { defaultResolution = ((Resolution) resolutionEntities[i]).getWidth(); break; } } resolutionsPB = new ResolutionPB[resolutionEntities.length]; for (int i = 0; i < resolutionsPB.length; i++) { resolutionsPB[i] = new ResolutionPB(); try { PropertyUtils.copyProperties(resolutionsPB[i], resolutionEntities[i]); } catch (IllegalAccessException e) { } catch (InvocationTargetException e) { } catch (NoSuchMethodException e) { } } } Map pictureParameters = new HashMap(); if (StringUtil.asNull(request.getServerName()) != null) { pictureParameters.put("hostname", request.getServerName()); if (request.getServerPort() != 80) { pictureParameters.put("port", new Integer(request.getServerPort())); } } pictureParameters.put("contextpath", request.getContextPath()); pictureParameters.put("user", username); PicturePB[] picturesPB = new PicturePB[entities.length]; ActionForward updateForward = mapping.findForward("picture-update-link"); ActionForward removeForward = mapping.findForward("picture-remove-link"); ActionForward resolutionForward = mapping.findForward("picture-resolution-link"); ActionForward pictureLinkForward = mapping.findForward("picture-link"); ActionForward pictureImageForward = mapping.findForward("picture-image"); if (defaultResolution != null) { pictureParameters.put("width", defaultResolution.toString()); } if (StringUtil.asNull(request.getParameter("thumbnailwidth")) != null) { pictureParameters.put("thumbnailwidth", request.getParameter("thumbnailwidth")); } else if (gallery.getThumbnailWidth() != null && gallery.getThumbnailWidth().intValue() > 0) { pictureParameters.put("thumbnailwidth", gallery.getThumbnailWidth()); } if (StringUtil.asNull(request.getParameter("thumbnailheight")) != null) { pictureParameters.put("thumbnailheight", request.getParameter("thumbnailheight")); } else if (gallery.getThumbnailHeight() != null && gallery.getThumbnailHeight().intValue() > 0) { pictureParameters.put("thumbnailheight", gallery.getThumbnailHeight()); } List thumbnailInfoList = new ArrayList(); if (StringUtil.asNull(gallery.getThumbnailRow1()) != null) { thumbnailInfoList.add(gallery.getThumbnailRow1()); } if (StringUtil.asNull(gallery.getThumbnailRow2()) != null) { thumbnailInfoList.add(gallery.getThumbnailRow2()); } if (StringUtil.asNull(gallery.getThumbnailRow3()) != null) { thumbnailInfoList.add(gallery.getThumbnailRow3()); } String[] thumbnailInfo = (String[]) thumbnailInfoList.toArray(new String[0]); JPEGMetadataHandler jpegHandler = new JPEGMetadataHandler(false); FileMetadataHandler fileHandler = new FileMetadataHandler(false); Integer currentStart = fb.getStart(); if (currentStart == null) { currentStart = new Integer(0); } Map currentLinkPictureParameters = new HashMap(); Map currentParameters = new HashMap(); currentParameters.put("user", username); if (StringUtil.asNull(request.getServerName()) != null) { currentParameters.put("hostname", request.getServerName()); if (request.getServerPort() != 80) { currentParameters.put("port", new Integer(request.getServerPort())); } } currentParameters.put("contextpath", request.getContextPath()); Enumeration paramEnum = request.getParameterNames(); while (paramEnum.hasMoreElements()) { String parameter = (String) paramEnum.nextElement(); currentParameters.put(parameter, request.getParameter(parameter)); } ActionForward currentForward = mapping.findForward("current-link"); for (int i = 0; i < entities.length; i++) { picturesPB[i] = new PicturePB(); Picture picture = (Picture) entities[i]; if (StringUtil.asNull(picture.getFile()) != null) { picture.setFile(getImagePath(storageEntities, picture.getFile())); } PropertyUtils.copyProperties(picturesPB[i], entities[i]); if (useEnglish && StringUtil.asNull(picture.getTitleEnglish()) != null) { picturesPB[i].setTitle(picture.getTitleEnglish()); } if (useEnglish && StringUtil.asNull(picture.getDescriptionEnglish()) != null) { picturesPB[i].setDescription(picture.getDescriptionEnglish()); } pictureParameters.put("gallery", virtualGalleryId); pictureParameters.put("picture", picturesPB[i].getId()); if (picturesPB[i].getImage().startsWith("{")) { String path = pictureImageForward.getPath(); picturesPB[i].setImage( ServletParameterHelper.replaceDynamicParameters(path, pictureParameters)); } else { picturesPB[i].setImage(getImagePath(storageEntities, picturesPB[i].getImage())); } if (gallery.getUsername().equals(request.getRemoteUser())) { if (updateForward != null) { String path = updateForward.getPath(); picturesPB[i].setUpdateLink( ServletParameterHelper.replaceDynamicParameters(path, pictureParameters)); } if (removeForward != null) { String path = removeForward.getPath(); picturesPB[i].setRemoveLink( ServletParameterHelper.replaceDynamicParameters(path, pictureParameters)); } } else { if (gallery.getShowResolutionLinks() != null && gallery.getShowResolutionLinks().booleanValue() && resolutionForward != null) { ResolutionLinkPB[] resolutionLinksPB = new ResolutionLinkPB[resolutionsPB.length]; Map resolutionParameters = new HashMap(); resolutionParameters.put("gallery", virtualGalleryId); resolutionParameters.put("picture", picturesPB[i].getId()); for (int j = 0; j < resolutionLinksPB.length; j++) { resolutionParameters.put("width", resolutionsPB[j].getWidth()); String path = ServletParameterHelper.replaceDynamicParameters( resolutionForward.getPath(), resolutionParameters); resolutionLinksPB[j] = new ResolutionLinkPB( resolutionsPB[j].getId(), resolutionsPB[j].getDescription(), path); } picturesPB[i].setResolutions(resolutionLinksPB); } } if (picturesPB[i].getLink().startsWith("{")) { String path = null; if (defaultResolution != null) { if (resolutionForward != null) { path = resolutionForward.getPath(); } } if (path == null) { path = pictureLinkForward.getPath(); } picturesPB[i].setLink( ServletParameterHelper.replaceDynamicParameters(path, pictureParameters)); } else { picturesPB[i].setLink(getImagePath(storageEntities, picturesPB[i].getLink())); } if (gallery.getShowPictureTitle() != null && !gallery.getShowPictureTitle().booleanValue()) { picturesPB[i].setTitle(null); } picturesPB[i].setGallery(virtualGalleryId); if (picturesPB[i].getTitle() != null && gallery.getUseShortPictureNames() != null && gallery.getUseShortPictureNames().booleanValue()) { picturesPB[i].setTitle(((Picture) entities[i]).getShortTitle()); } if (StringUtil.asNull(gallery.getThumbnailPictureTitle()) != null) { picturesPB[i].setTitle( getPictureInfo( gallery.getThumbnailPictureTitle(), picture, picturesPB[i], jpegHandler, fileHandler)); } if (picturesPB[i].getTitle() != null && gallery.getCutLongPictureTitles() != null && gallery.getCutLongPictureTitles().booleanValue()) { if (picturesPB[i].getTitle() != null && picturesPB[i].getTitle().length() > 30) { picturesPB[i].setTitle( "..." + picturesPB[i].getTitle().substring(picturesPB[i].getTitle().length() - 27)); } } if (thumbnailInfo.length > 0) { picturesPB[i].setRow1Info( getPictureInfo(thumbnailInfo[0], picture, picturesPB[i], jpegHandler, fileHandler)); } if (thumbnailInfo.length > 1) { picturesPB[i].setRow2Info( getPictureInfo(thumbnailInfo[1], picture, picturesPB[i], jpegHandler, fileHandler)); } if (thumbnailInfo.length > 2) { picturesPB[i].setRow3Info( getPictureInfo(thumbnailInfo[2], picture, picturesPB[i], jpegHandler, fileHandler)); } if (currentForward != null) { currentLinkPictureParameters.clear(); currentLinkPictureParameters.putAll(pictureParameters); currentLinkPictureParameters.putAll(currentParameters); currentLinkPictureParameters.put("start", currentStart.toString()); picturesPB[i].setCurrentLink( ServletParameterHelper.replaceDynamicParameters( currentForward.getPath(), currentLinkPictureParameters)); currentStart = new Integer(currentStart.intValue() + 1); } } PictureCollectionPB pb = new PictureCollectionPB(); pb.setPictures(picturesPB); Map parameters = new HashMap(); parameters.putAll(currentParameters); addParameters(parameters, fb); Integer prevStart = getPreviousPage(fb.getStart(), max); if (prevStart != null) { parameters.put("start", prevStart.toString()); ActionForward forward = mapping.findForward("previous-link"); if (forward != null) { pb.setPrevLink( ServletParameterHelper.replaceDynamicParameters(forward.getPath(), parameters)); } } else { pb.setPrevLink(null); } Integer nextStart = getNextPage(fb.getStart(), max, picturesPB.length); if (nextStart != null) { parameters.put("start", nextStart.toString()); ActionForward forward = mapping.findForward("next-link"); if (forward != null) { pb.setNextLink( ServletParameterHelper.replaceDynamicParameters(forward.getPath(), parameters)); } } else { pb.setNextLink(null); } currentStart = fb.getStart(); if (currentStart == null) { currentStart = new Integer(0); } parameters.put("start", currentStart.toString()); if (currentForward != null) { pb.setCurrentLink( ServletParameterHelper.replaceDynamicParameters(currentForward.getPath(), parameters)); } ActionForward forward = null; if (gallery.getAllowSearch() != null && gallery.getAllowSearch().booleanValue()) { forward = mapping.findForward("search-link"); } else { forward = mapping.findForward("search-private-link"); } if (forward != null) { pb.setSearchLink( ServletParameterHelper.replaceDynamicParameters(forward.getPath(), parameters)); } forward = mapping.findForward("page-link"); if (forward != null) { pb.setPageLink( ServletParameterHelper.replaceDynamicParameters(forward.getPath(), parameters)); } request.setAttribute("picturesPB", pb); GalleryPB galleryPB = new GalleryPB(); PropertyUtils.copyProperties(galleryPB, gallery); if (useEnglish && StringUtil.asNull(gallery.getTitleEnglish()) != null) { galleryPB.setTitle(gallery.getTitleEnglish()); } if (useEnglish && StringUtil.asNull(gallery.getDescriptionEnglish()) != null) { galleryPB.setDescription(gallery.getDescriptionEnglish()); } galleryPB.setVirtual(Boolean.valueOf(!virtualGalleryId.equals(galleryId))); if (galleryPB.getNoOfCols() != null && galleryPB.getNoOfCols().intValue() <= 0) { galleryPB.setNoOfCols(null); } if (galleryPB.getNoOfRows() != null && galleryPB.getNoOfRows().intValue() <= 0) { galleryPB.setNoOfRows(null); } if (max == null || max.intValue() == 0 || (gallery.getNoOfCols() != null && gallery.getNoOfRows() != null && (gallery.getNoOfRows().intValue() * gallery.getNoOfCols().intValue()) < max.intValue())) { galleryPB.setNoOfRows(null); } galleryPB.setNoOfThumnailInfoRows( thumbnailInfo.length > 0 ? new Integer(thumbnailInfo.length + 1) : new Integer(1)); request.setAttribute("galleryPB", galleryPB); String skin = gallery.getSkin(); if (StringUtil.asNull(fb.getSkin()) != null) { skin = fb.getSkin(); } if (mapping.getParameter() != null && mapping.getParameter().equals("useskin")) { SkinFB previous = (SkinFB) request.getSession().getAttribute("skinPB"); if (StringUtil.asNull(skin) == null) { UserAccount template = (UserAccount) getEnvironment().getEntityFactory().create("gallery-useraccount"); template.setUsername(username); UserAccount account = (UserAccount) getEnvironment() .getEntityStorageFactory() .getStorage("gallery-useraccount") .load(template); skin = account.getSkin(); } if (previous == null || previous.getId() == null || !previous.getId().equals(skin)) { SkinFB pbSkin = SkinHelper.loadSkin(mapping, skin); request.getSession().setAttribute("skinPB", pbSkin); } } SkinFB pbSkin = (SkinFB) request.getSession().getAttribute("skinPB"); if (pbSkin == null || StringUtil.asNull(pbSkin.getStylesheet()) == null) { if (gallery != null && gallery.getStylesheet() != null && gallery.getStylesheet().length() > 0) { request.getSession().setAttribute("stylesheetPB", gallery.getStylesheet()); } else { request.getSession().removeAttribute("stylesheetPB"); } } else { request.getSession().setAttribute("stylesheetPB", pbSkin.getStylesheet()); } String pbTitle = (String) request.getSession().getAttribute("titlePB"); if (StringUtil.asNull(pbTitle) == null) { UserAccount template = (UserAccount) getEnvironment().getEntityFactory().create("gallery-useraccount"); template.setUsername(username); UserAccount account = (UserAccount) getEnvironment() .getEntityStorageFactory() .getStorage("gallery-useraccount") .load(template); String title = account.getTitle(); if (useEnglish && StringUtil.asNull(account.getTitleEnglish()) != null) { title = account.getTitleEnglish(); } request.getSession().setAttribute("titlePB", title); } }