コード例 #1
0
ファイル: DLImpl.java プロジェクト: einsty/liferay-portal
  static {
    _allMediaGalleryMimeTypes.addAll(
        SetUtil.fromArray(PropsUtil.getArray(PropsKeys.DL_FILE_ENTRY_PREVIEW_AUDIO_MIME_TYPES)));
    _allMediaGalleryMimeTypes.addAll(
        SetUtil.fromArray(PropsUtil.getArray(PropsKeys.DL_FILE_ENTRY_PREVIEW_VIDEO_MIME_TYPES)));
    _allMediaGalleryMimeTypes.addAll(
        SetUtil.fromArray(PropsUtil.getArray(PropsKeys.DL_FILE_ENTRY_PREVIEW_IMAGE_MIME_TYPES)));

    _allMediaGalleryMimeTypesString = StringUtil.merge(_allMediaGalleryMimeTypes);

    String[] fileIcons = null;

    try {
      fileIcons = PropsUtil.getArray(PropsKeys.DL_FILE_ICONS);
    } catch (Exception e) {
      if (_log.isDebugEnabled()) {
        _log.debug(e, e);
      }

      fileIcons = new String[] {StringPool.BLANK};
    }

    for (int i = 0; i < fileIcons.length; i++) {

      // Only process non wildcard extensions

      if (!StringPool.STAR.equals(fileIcons[i])) {

        // Strip starting period

        String extension = fileIcons[i];

        if (extension.length() > 0) {
          extension = extension.substring(1);
        }

        _fileIcons.add(extension);
      }
    }

    String[] genericNames = PropsUtil.getArray(PropsKeys.DL_FILE_GENERIC_NAMES);

    for (String genericName : genericNames) {
      _populateGenericNamesMap(genericName);
    }
  }
コード例 #2
0
  private void _populateGenericNamesMap(String genericName) {
    String[] extensions =
        PropsUtil.getArray(PropsKeys.DL_FILE_GENERIC_EXTENSIONS, new Filter(genericName));

    for (String extension : extensions) {
      _genericNames.put(extension, genericName);
    }
  }
コード例 #3
0
  protected void indexKeywords(
      long companyId,
      String languageId,
      String propsKey,
      String keywordFieldName,
      String typeFieldValue,
      int maxNGramLength)
      throws Exception {

    String[] dictionaryFileNames = PropsUtil.getArray(propsKey, new Filter(languageId));

    indexKeywords(
        companyId,
        0,
        languageId,
        dictionaryFileNames,
        keywordFieldName,
        typeFieldValue,
        maxNGramLength);

    List<Group> groups = GroupLocalServiceUtil.getLiveGroups();

    for (Group group : groups) {
      String[] groupDictionaryFileNames =
          PropsUtil.getArray(
              PropsKeys.INDEX_SEARCH_SPELL_CHECKER_DICTIONARY,
              new Filter(languageId, String.valueOf(group.getGroupId())));

      if (ArrayUtil.isEmpty(groupDictionaryFileNames)) {
        continue;
      }

      indexKeywords(
          companyId,
          group.getGroupId(),
          languageId,
          dictionaryFileNames,
          keywordFieldName,
          typeFieldValue,
          maxNGramLength);
    }
  }
コード例 #4
0
/** @author Alexander Chow */
public class JournalArticleConstants {

  public static final String CANONICAL_URL_SEPARATOR = "/-/";

  public static final double DEFAULT_VERSION = 1.0;

  public static final String PORTLET = "portlet";

  public static final String STAND_ALONE = "stand-alone";

  public static final String[] TYPES = PropsUtil.getArray(PropsKeys.JOURNAL_ARTICLE_TYPES);
}
コード例 #5
0
  public String getSocialBookmarksDisplayStyle() {
    if (_socialBookmarksDisplayStyle == null) {
      _socialBookmarksDisplayStyle =
          _portletPreferences.getValue("socialBookmarksDisplayStyle", null);

      if (Validator.isNull(_socialBookmarksDisplayStyle)) {
        String[] socialBookmarksDisplayStyles =
            PropsUtil.getArray(PropsKeys.SOCIAL_BOOKMARK_DISPLAY_STYLES);

        _socialBookmarksDisplayStyle = socialBookmarksDisplayStyles[0];
      }
    }

    return _socialBookmarksDisplayStyle;
  }
コード例 #6
0
/**
 * @author Brian Wing Shun Chan
 * @author Bruno Farache
 */
public class DocumentImpl implements Document {

  public static String getLocalizedName(Locale locale, String name) {
    if (locale == null) {
      return name;
    }

    String languageId = LocaleUtil.toLanguageId(locale);

    return getLocalizedName(languageId, name);
  }

  public static String getLocalizedName(String languageId, String name) {
    return LocalizationUtil.getLocalizedName(name, languageId);
  }

  public static String getSortableFieldName(String name) {
    return name.concat(StringPool.UNDERLINE).concat(_SORTABLE_FIELD_SUFFIX);
  }

  public static String getSortFieldName(Sort sort, String scoreFieldName) {
    if (sort.getType() == Sort.SCORE_TYPE) {
      return scoreFieldName;
    }

    String fieldName = sort.getFieldName();

    if (DocumentImpl.isSortableFieldName(fieldName)) {
      return fieldName;
    }

    if ((sort.getType() == Sort.STRING_TYPE) && !DocumentImpl.isSortableTextField(fieldName)) {

      return scoreFieldName;
    }

    return DocumentImpl.getSortableFieldName(fieldName);
  }

  public static boolean isSortableFieldName(String name) {
    return name.endsWith(_SORTABLE_FIELD_SUFFIX);
  }

  public static boolean isSortableTextField(String name) {
    return _defaultSortableTextFields.contains(name);
  }

  @Override
  public void add(Field field) {
    _fields.put(field.getName(), field);
  }

  @Override
  public void addDate(String name, Date value) {
    if (value == null) {
      return;
    }

    addDate(name, new Date[] {value});
  }

  @Override
  public void addDate(String name, Date[] values) {
    if (values == null) {
      return;
    }

    if (_dateFormat == null) {
      _dateFormat = FastDateFormatFactoryUtil.getSimpleDateFormat(_INDEX_DATE_FORMAT_PATTERN);
    }

    String[] datesString = new String[values.length];
    Long[] datesTime = new Long[values.length];

    for (int i = 0; i < values.length; i++) {
      datesString[i] = _dateFormat.format(values[i]);
      datesTime[i] = values[i].getTime();
    }

    createSortableNumericField(name, false, datesTime);

    Field field = createField(name, datesString);

    field.setDates(values);
  }

  @Override
  public void addDateSortable(String name, Date value) {
    if (value == null) {
      return;
    }

    addDateSortable(name, new Date[] {value});
  }

  @Override
  public void addDateSortable(String name, Date[] values) {
    if (values == null) {
      return;
    }

    String[] datesString = new String[values.length];
    Long[] datesTime = new Long[values.length];

    for (int i = 0; i < values.length; i++) {
      datesString[i] = _dateFormat.format(values[i]);
      datesTime[i] = values[i].getTime();
    }

    createSortableNumericField(name, true, datesTime);

    addKeyword(name, datesString);
  }

  @Override
  public void addFile(String name, byte[] bytes, String fileExt) {
    InputStream is = new UnsyncByteArrayInputStream(bytes);

    addFile(name, is, fileExt);
  }

  @Override
  public void addFile(String name, File file, String fileExt) throws IOException {

    InputStream is = new FileInputStream(file);

    addFile(name, is, fileExt);
  }

  @Override
  public void addFile(String name, InputStream is, String fileExt) {
    addText(name, FileUtil.extractText(is, fileExt));
  }

  @Override
  public void addFile(String name, InputStream is, String fileExt, int maxStringLength) {

    addText(name, FileUtil.extractText(is, fileExt, maxStringLength));
  }

  @Override
  public void addGeoLocation(double latitude, double longitude) {
    addGeoLocation(Field.GEO_LOCATION, latitude, longitude);
  }

  @Override
  public void addGeoLocation(String name, double latitude, double longitude) {
    Field field = new Field(name);

    field.setGeoLocationPoint(new GeoLocationPoint(latitude, longitude));

    add(field);
  }

  @Override
  public void addKeyword(String name, boolean value) {
    addKeyword(name, String.valueOf(value));
  }

  @Override
  public void addKeyword(String name, Boolean value) {
    addKeyword(name, String.valueOf(value));
  }

  @Override
  public void addKeyword(String name, boolean[] values) {
    if (values == null) {
      return;
    }

    addKeyword(name, ArrayUtil.toStringArray(values));
  }

  @Override
  public void addKeyword(String name, Boolean[] values) {
    if (values == null) {
      return;
    }

    addKeyword(name, ArrayUtil.toStringArray(values));
  }

  @Override
  public void addKeyword(String name, double value) {
    addKeyword(name, String.valueOf(value));
  }

  @Override
  public void addKeyword(String name, Double value) {
    addKeyword(name, String.valueOf(value));
  }

  @Override
  public void addKeyword(String name, double[] values) {
    if (values == null) {
      return;
    }

    addKeyword(name, ArrayUtil.toStringArray(values));
  }

  @Override
  public void addKeyword(String name, Double[] values) {
    if (values == null) {
      return;
    }

    addKeyword(name, ArrayUtil.toStringArray(values));
  }

  @Override
  public void addKeyword(String name, float value) {
    addKeyword(name, String.valueOf(value));
  }

  @Override
  public void addKeyword(String name, Float value) {
    addKeyword(name, String.valueOf(value));
  }

  @Override
  public void addKeyword(String name, float[] values) {
    if (values == null) {
      return;
    }

    addKeyword(name, ArrayUtil.toStringArray(values));
  }

  @Override
  public void addKeyword(String name, Float[] values) {
    if (values == null) {
      return;
    }

    addKeyword(name, ArrayUtil.toStringArray(values));
  }

  @Override
  public void addKeyword(String name, int value) {
    addKeyword(name, String.valueOf(value));
  }

  @Override
  public void addKeyword(String name, int[] values) {
    if (values == null) {
      return;
    }

    addKeyword(name, ArrayUtil.toStringArray(values));
  }

  @Override
  public void addKeyword(String name, Integer value) {
    addKeyword(name, String.valueOf(value));
  }

  @Override
  public void addKeyword(String name, Integer[] values) {
    if (values == null) {
      return;
    }

    addKeyword(name, ArrayUtil.toStringArray(values));
  }

  @Override
  public void addKeyword(String name, long value) {
    addKeyword(name, String.valueOf(value));
  }

  @Override
  public void addKeyword(String name, Long value) {
    addKeyword(name, String.valueOf(value));
  }

  @Override
  public void addKeyword(String name, long[] values) {
    if (values == null) {
      return;
    }

    addKeyword(name, ArrayUtil.toStringArray(values));
  }

  @Override
  public void addKeyword(String name, Long[] values) {
    if (values == null) {
      return;
    }

    addKeyword(name, ArrayUtil.toStringArray(values));
  }

  @Override
  public void addKeyword(String name, short value) {
    addKeyword(name, String.valueOf(value));
  }

  @Override
  public void addKeyword(String name, Short value) {
    addKeyword(name, String.valueOf(value));
  }

  @Override
  public void addKeyword(String name, short[] values) {
    if (values == null) {
      return;
    }

    addKeyword(name, ArrayUtil.toStringArray(values));
  }

  @Override
  public void addKeyword(String name, Short[] values) {
    if (values == null) {
      return;
    }

    addKeyword(name, ArrayUtil.toStringArray(values));
  }

  @Override
  public void addKeyword(String name, String value) {
    addKeyword(name, value, false);
  }

  @Override
  public void addKeyword(String name, String value, boolean lowerCase) {
    createKeywordField(name, value, lowerCase);

    createSortableKeywordField(name, value);
  }

  @Override
  public void addKeyword(String name, String[] values) {
    if (values == null) {
      return;
    }

    createField(name, values);
  }

  @Override
  public void addKeywordSortable(String name, Boolean value) {
    String valueString = String.valueOf(value);

    createKeywordField(name, valueString, false);

    createSortableTextField(name, valueString);
  }

  @Override
  public void addKeywordSortable(String name, Boolean[] values) {
    if (values == null) {
      return;
    }

    String[] valuesString = ArrayUtil.toStringArray(values);

    createField(name, valuesString);

    createSortableTextField(name, valuesString);
  }

  @Override
  public void addKeywordSortable(String name, String value) {
    createKeywordField(name, value, false);

    createSortableTextField(name, value);
  }

  @Override
  public void addKeywordSortable(String name, String[] values) {
    createField(name, values);

    createSortableTextField(name, values);
  }

  @Override
  public void addLocalizedKeyword(String name, Map<Locale, String> values) {
    addLocalizedKeyword(name, values, false);
  }

  @Override
  public void addLocalizedKeyword(String name, Map<Locale, String> values, boolean lowerCase) {

    if ((values == null) || values.isEmpty()) {
      return;
    }

    if (lowerCase) {
      Map<Locale, String> lowerCaseValues = new HashMap<>(values.size());

      for (Map.Entry<Locale, String> entry : values.entrySet()) {
        String value = GetterUtil.getString(entry.getValue());

        lowerCaseValues.put(entry.getKey(), StringUtil.toLowerCase(value));
      }

      values = lowerCaseValues;
    }

    createField(name, values);
  }

  @Override
  public void addLocalizedKeyword(
      String name, Map<Locale, String> values, boolean lowerCase, boolean sortable) {

    if ((values == null) || values.isEmpty()) {
      return;
    }

    if (lowerCase) {
      Map<Locale, String> lowerCaseValues = new HashMap<>(values.size());

      for (Map.Entry<Locale, String> entry : values.entrySet()) {
        String value = GetterUtil.getString(entry.getValue());

        lowerCaseValues.put(entry.getKey(), StringUtil.toLowerCase(value));
      }

      values = lowerCaseValues;
    }

    createField(name, values, sortable);
  }

  @Override
  public void addLocalizedText(String name, Map<Locale, String> values) {
    if ((values == null) || values.isEmpty()) {
      return;
    }

    Field field = createField(name, values);

    field.setTokenized(true);
  }

  @Override
  public void addNumber(String name, BigDecimal value) {
    createNumberField(name, value);
  }

  @Override
  public void addNumber(String name, BigDecimal[] values) {
    createNumberField(name, values);
  }

  @Override
  public void addNumber(String name, double value) {
    createNumberField(name, Double.valueOf(value));
  }

  @Override
  public void addNumber(String name, Double value) {
    createNumberField(name, value);
  }

  @Override
  public void addNumber(String name, double[] values) {
    if (values == null) {
      return;
    }

    createNumberField(name, ArrayUtil.toArray(values));
  }

  @Override
  public void addNumber(String name, Double[] values) {
    createNumberField(name, values);
  }

  @Override
  public void addNumber(String name, float value) {
    createNumberField(name, Float.valueOf(value));
  }

  @Override
  public void addNumber(String name, Float value) {
    createNumberField(name, value);
  }

  @Override
  public void addNumber(String name, float[] values) {
    if (values == null) {
      return;
    }

    createNumberField(name, ArrayUtil.toArray(values));
  }

  @Override
  public void addNumber(String name, Float[] values) {
    createNumberField(name, values);
  }

  @Override
  public void addNumber(String name, int value) {
    createNumberField(name, Integer.valueOf(value));
  }

  @Override
  public void addNumber(String name, int[] values) {
    if (values == null) {
      return;
    }

    createNumberField(name, ArrayUtil.toArray(values));
  }

  @Override
  public void addNumber(String name, Integer value) {
    createNumberField(name, value);
  }

  @Override
  public void addNumber(String name, Integer[] values) {
    createNumberField(name, values);
  }

  @Override
  public void addNumber(String name, long value) {
    createNumberField(name, Long.valueOf(value));
  }

  @Override
  public void addNumber(String name, Long value) {
    createNumberField(name, value);
  }

  @Override
  public void addNumber(String name, long[] values) {
    if (values == null) {
      return;
    }

    createNumberField(name, ArrayUtil.toArray(values));
  }

  @Override
  public void addNumber(String name, Long[] values) {
    createNumberField(name, values);
  }

  @Override
  public void addNumber(String name, String value) {
    createNumberField(name, Long.valueOf(value));
  }

  @Override
  public void addNumber(String name, String[] values) {
    if (values == null) {
      return;
    }

    Long[] longs = new Long[values.length];

    for (int i = 0; i < values.length; i++) {
      longs[i] = Long.valueOf(values[i]);
    }

    createNumberField(name, longs);
  }

  @Override
  public void addNumberSortable(String name, BigDecimal value) {
    createNumberFieldWithTypedSortable(name, value);
  }

  @Override
  public void addNumberSortable(String name, BigDecimal[] values) {
    createNumberFieldWithTypedSortable(name, values);
  }

  @Override
  public void addNumberSortable(String name, Double value) {
    createNumberFieldWithTypedSortable(name, value);
  }

  @Override
  public void addNumberSortable(String name, Double[] values) {
    createNumberFieldWithTypedSortable(name, values);
  }

  @Override
  public void addNumberSortable(String name, Float value) {
    createNumberFieldWithTypedSortable(name, value);
  }

  @Override
  public void addNumberSortable(String name, Float[] values) {
    createNumberFieldWithTypedSortable(name, values);
  }

  @Override
  public void addNumberSortable(String name, Integer value) {
    createNumberFieldWithTypedSortable(name, value);
  }

  @Override
  public void addNumberSortable(String name, Integer[] values) {
    createNumberFieldWithTypedSortable(name, values);
  }

  @Override
  public void addNumberSortable(String name, Long value) {
    createNumberFieldWithTypedSortable(name, value);
  }

  @Override
  public void addNumberSortable(String name, Long[] values) {
    createNumberFieldWithTypedSortable(name, values);
  }

  @Override
  public void addText(String name, String value) {
    if (Validator.isNull(value)) {
      return;
    }

    Field field = createField(name, value);

    field.setTokenized(true);

    createSortableKeywordField(name, value);
  }

  @Override
  public void addText(String name, String[] values) {
    if (values == null) {
      return;
    }

    Field field = createField(name, values);

    field.setTokenized(true);

    createSortableKeywordField(name, values);
  }

  @Override
  public void addTextSortable(String name, String value) {
    if (Validator.isNull(value)) {
      return;
    }

    Field field = createField(name, value);

    field.setTokenized(true);

    createSortableTextField(name, value);
  }

  @Override
  public void addTextSortable(String name, String[] values) {
    if (values == null) {
      return;
    }

    Field field = createField(name, values);

    field.setTokenized(true);

    createSortableTextField(name, values);
  }

  @Override
  public void addUID(String portletId, long field1) {
    addUID(portletId, String.valueOf(field1));
  }

  @Override
  public void addUID(String portletId, long field1, String field2) {
    addUID(portletId, String.valueOf(field1), field2);
  }

  @Override
  public void addUID(String portletId, Long field1) {
    addUID(portletId, field1.longValue());
  }

  @Override
  public void addUID(String portletId, Long field1, String field2) {
    addUID(portletId, field1.longValue(), field2);
  }

  @Override
  public void addUID(String portletId, String field1) {
    addUID(portletId, field1, null);
  }

  @Override
  public void addUID(String portletId, String field1, String field2) {
    addUID(portletId, field1, field2, null);
  }

  @Override
  public void addUID(String portletId, String field1, String field2, String field3) {

    addUID(portletId, field1, field2, field3, null);
  }

  @Override
  public void addUID(String portletId, String field1, String field2, String field3, String field4) {

    String uid = portletId + _UID_PORTLET + field1;

    if (field2 != null) {
      uid += _UID_FIELD + field2;
    }

    if (field3 != null) {
      uid += _UID_FIELD + field3;
    }

    if (field4 != null) {
      uid += _UID_FIELD + field4;
    }

    addKeyword(Field.UID, uid);
  }

  @Override
  public Object clone() {
    DocumentImpl documentImpl = new DocumentImpl();

    documentImpl.setSortableTextFields(_sortableTextFields);

    return documentImpl;
  }

  @Override
  public String get(Locale locale, String name) {
    if (locale == null) {
      return get(name);
    }

    String localizedName = getLocalizedName(locale, name);

    Field field = getField(localizedName);

    if (field == null) {
      field = getField(name);
    }

    if (field == null) {
      return StringPool.BLANK;
    }

    return field.getValue();
  }

  @Override
  public String get(Locale locale, String name, String defaultName) {
    if (locale == null) {
      return get(name, defaultName);
    }

    String localizedName = getLocalizedName(locale, name);

    Field field = getField(localizedName);

    if (field == null) {
      localizedName = getLocalizedName(locale, defaultName);

      field = getField(localizedName);
    }

    if (field == null) {
      return StringPool.BLANK;
    }

    return field.getValue();
  }

  @Override
  public String get(String name) {
    Field field = getField(name);

    if (field == null) {
      return StringPool.BLANK;
    }

    return field.getValue();
  }

  @Override
  public String get(String name, String defaultName) {
    Field field = getField(name);

    if (field == null) {
      return get(defaultName);
    }

    return field.getValue();
  }

  @Override
  public Date getDate(String name) throws ParseException {
    DateFormat dateFormat = DateFormatFactoryUtil.getSimpleDateFormat(_INDEX_DATE_FORMAT_PATTERN);

    return dateFormat.parse(get(name));
  }

  @Override
  public Field getField(String name) {
    return doGetField(name, false);
  }

  @Override
  public Map<String, Field> getFields() {
    return _fields;
  }

  @Override
  public String getPortletId() {
    String uid = getUID();

    int pos = uid.indexOf(_UID_PORTLET);

    return uid.substring(0, pos);
  }

  @Override
  public String getUID() {
    Field field = getField(Field.UID);

    if (field == null) {
      throw new RuntimeException("UID is not set");
    }

    return field.getValue();
  }

  @Override
  public String[] getValues(String name) {
    Field field = getField(name);

    if (field == null) {
      return new String[] {StringPool.BLANK};
    }

    return field.getValues();
  }

  @Override
  public boolean hasField(String name) {
    if (_fields.containsKey(name)) {
      return true;
    }

    return false;
  }

  @Override
  public boolean isDocumentSortableTextField(String name) {
    return _sortableTextFields.contains(name);
  }

  @Override
  public void remove(String name) {
    _fields.remove(name);
  }

  public void setFields(Map<String, Field> fields) {
    _fields = fields;
  }

  @Override
  public void setSortableTextFields(String[] sortableTextFields) {
    _sortableTextFields = SetUtil.fromArray(sortableTextFields);
  }

  @Override
  public String toString() {
    StringBundler sb = new StringBundler(5 * _fields.size());

    toString(sb, _fields.values());

    return sb.toString();
  }

  protected Field createField(String name) {
    return doGetField(name, true);
  }

  protected Field createField(String name, boolean sortable, String... values) {

    Field field = createField(name);

    field.setSortable(sortable);
    field.setValues(values);

    return field;
  }

  protected Field createField(String name, Map<Locale, String> localizedValues) {

    return createField(name, localizedValues, false);
  }

  protected Field createField(String name, Map<Locale, String> localizedValues, boolean sortable) {

    Field field = createField(name);

    field.setLocalizedValues(localizedValues);
    field.setSortable(sortable);

    return field;
  }

  protected Field createField(String name, String... values) {
    return createField(name, false, values);
  }

  protected void createKeywordField(String name, String value, boolean lowerCase) {

    if (lowerCase && Validator.isNotNull(value)) {
      value = StringUtil.toLowerCase(value);
    }

    createField(name, value);
  }

  protected void createNumberField(String name, boolean typify, Number value) {

    if (value == null) {
      return;
    }

    String valueString = String.valueOf(value);

    createSortableNumericField(name, typify, valueString, value.getClass());

    createField(name, valueString);
  }

  protected <T extends Number & Comparable<? super T>> void createNumberField(
      String name, boolean typify, T... values) {

    if (values == null) {
      return;
    }

    createSortableNumericField(name, typify, values);

    createField(name, ArrayUtil.toStringArray(values));
  }

  protected void createNumberField(String name, Number value) {
    createNumberField(name, false, value);
  }

  protected <T extends Number & Comparable<? super T>> void createNumberField(
      String name, T... values) {

    createNumberField(name, false, values);
  }

  protected void createNumberFieldWithTypedSortable(String name, Number value) {

    createNumberField(name, true, value);
  }

  protected <T extends Number & Comparable<? super T>> void createNumberFieldWithTypedSortable(
      String name, T... values) {

    createNumberField(name, true, values);
  }

  protected void createSortableKeywordField(String name, String value) {
    if (isDocumentSortableTextField(name)) {
      createSortableTextField(name, value);
    }
  }

  protected void createSortableKeywordField(String name, String[] values) {
    if (isDocumentSortableTextField(name)) {
      createSortableTextField(name, values);
    }
  }

  protected void createSortableNumericField(
      String name, boolean typify, String value, Class<? extends Number> clazz) {

    if (typify) {
      name = name.concat(StringPool.UNDERLINE).concat("Number");
    }

    Field field = createField(getSortableFieldName(name), value);

    field.setNumeric(true);
    field.setNumericClass(clazz);
  }

  protected <T extends Number & Comparable<? super T>> void createSortableNumericField(
      String name, boolean typify, T... values) {

    if ((values == null) || (values.length == 0)) {
      return;
    }

    T minValue = Collections.min(Arrays.asList(values));

    createSortableNumericField(name, typify, String.valueOf(minValue), minValue.getClass());
  }

  protected void createSortableTextField(String name, String value) {
    String truncatedValue = value;

    if (value.length() > _SORTABLE_TEXT_FIELDS_TRUNCATED_LENGTH) {
      truncatedValue = value.substring(0, _SORTABLE_TEXT_FIELDS_TRUNCATED_LENGTH);
    }

    createKeywordField(getSortableFieldName(name), truncatedValue, true);
  }

  protected void createSortableTextField(String name, String[] values) {
    if (values.length == 0) {
      return;
    }

    createSortableTextField(name, Collections.min(Arrays.asList(values)));
  }

  protected Field doGetField(String name, boolean createIfNew) {
    Field field = _fields.get(name);

    if ((field == null) && createIfNew) {
      field = new Field(name);

      _fields.put(name, field);
    }

    return field;
  }

  protected void setSortableTextFields(Set<String> sortableTextFields) {
    _sortableTextFields = sortableTextFields;
  }

  protected void toString(StringBundler sb, Collection<Field> fields) {
    sb.append(StringPool.OPEN_CURLY_BRACE);

    boolean firstField = true;

    for (Field field : fields) {
      if (!firstField) {
        sb.append(StringPool.COMMA);
        sb.append(StringPool.SPACE);
      } else {
        firstField = false;
      }

      if (field.hasChildren()) {
        sb.append(field.getName());
        sb.append(StringPool.COLON);

        toString(sb, field.getFields());
      } else {
        sb.append(field.getName());
        sb.append(StringPool.EQUAL);
        sb.append(Arrays.toString(field.getValues()));
      }
    }

    sb.append(StringPool.CLOSE_CURLY_BRACE);
  }

  private static final String _INDEX_DATE_FORMAT_PATTERN =
      PropsUtil.get(PropsKeys.INDEX_DATE_FORMAT_PATTERN);

  private static final String _SORTABLE_FIELD_SUFFIX = "sortable";

  private static final int _SORTABLE_TEXT_FIELDS_TRUNCATED_LENGTH =
      GetterUtil.getInteger(PropsUtil.get(PropsKeys.INDEX_SORTABLE_TEXT_FIELDS_TRUNCATED_LENGTH));

  private static final String _UID_FIELD = "_FIELD_";

  private static final String _UID_PORTLET = "_PORTLET_";

  private static Format _dateFormat;
  private static final Set<String> _defaultSortableTextFields =
      SetUtil.fromArray(PropsUtil.getArray(PropsKeys.INDEX_SORTABLE_TEXT_FIELDS));

  private Map<String, Field> _fields = new HashMap<>();
  private Set<String> _sortableTextFields = _defaultSortableTextFields;
}
コード例 #7
0
/** @author Mika Koivisto */
public class DLProcessorRegistryImpl implements DLProcessorRegistry {

  public void cleanUp(FileEntry fileEntry) {
    if (!DLProcessorThreadLocal.isEnabled()) {
      return;
    }

    for (String dlProcessorClassName : _DL_FILE_ENTRY_PROCESSORS) {
      DLProcessor dlProcessor = (DLProcessor) InstancePool.get(dlProcessorClassName);

      dlProcessor.cleanUp(fileEntry);
    }

    for (DLProcessor dlProcessor : _dlProcessors) {
      dlProcessor.cleanUp(fileEntry);
    }
  }

  public void cleanUp(FileVersion fileVersion) {
    if (!DLProcessorThreadLocal.isEnabled()) {
      return;
    }

    for (String dlProcessorClassName : _DL_FILE_ENTRY_PROCESSORS) {
      DLProcessor dlProcessor = (DLProcessor) InstancePool.get(dlProcessorClassName);

      dlProcessor.cleanUp(fileVersion);
    }

    for (DLProcessor dlProcessor : _dlProcessors) {
      dlProcessor.cleanUp(fileVersion);
    }
  }

  public void exportGeneratedFiles(
      PortletDataContext portletDataContext, FileEntry fileEntry, Element fileEntryElement)
      throws Exception {

    if ((fileEntry == null) || (fileEntry.getSize() == 0)) {
      return;
    }

    FileVersion latestFileVersion = _getLatestFileVersion(fileEntry);

    if (latestFileVersion == null) {
      return;
    }

    for (String dlProcessorClassName : _DL_FILE_ENTRY_PROCESSORS) {
      DLProcessor dlProcessor = (DLProcessor) InstancePool.get(dlProcessorClassName);

      if (dlProcessor.isSupported(latestFileVersion)) {
        dlProcessor.exportGeneratedFiles(portletDataContext, fileEntry, fileEntryElement);
      }
    }

    for (DLProcessor dlProcessor : _dlProcessors) {
      if (dlProcessor.isSupported(latestFileVersion)) {
        dlProcessor.exportGeneratedFiles(portletDataContext, fileEntry, fileEntryElement);
      }
    }
  }

  public void importGeneratedFiles(
      PortletDataContext portletDataContext,
      FileEntry fileEntry,
      FileEntry importedFileEntry,
      Element fileEntryElement)
      throws Exception {

    if ((importedFileEntry == null) || (importedFileEntry.getSize() == 0)) {
      return;
    }

    FileVersion fileVersion = importedFileEntry.getFileVersion();

    if (fileVersion == null) {
      return;
    }

    for (String dlProcessorClassName : _DL_FILE_ENTRY_PROCESSORS) {
      DLProcessor dlProcessor = (DLProcessor) InstancePool.get(dlProcessorClassName);

      if (dlProcessor.isSupported(fileVersion)) {
        dlProcessor.importGeneratedFiles(
            portletDataContext, fileEntry, importedFileEntry, fileEntryElement);
      }
    }

    for (DLProcessor dlProcessor : _dlProcessors) {
      if (dlProcessor.isSupported(fileVersion)) {
        dlProcessor.importGeneratedFiles(
            portletDataContext, fileEntry, importedFileEntry, fileEntryElement);
      }
    }
  }

  public void register(DLProcessor dlProcessor) {
    _dlProcessors.add(dlProcessor);
  }

  public void trigger(FileEntry fileEntry) {
    if (!DLProcessorThreadLocal.isEnabled()) {
      return;
    }

    if ((fileEntry == null) || (fileEntry.getSize() == 0)) {
      return;
    }

    FileVersion latestFileVersion = _getLatestFileVersion(fileEntry);

    if (latestFileVersion == null) {
      return;
    }

    for (String dlProcessorClassName : _DL_FILE_ENTRY_PROCESSORS) {
      DLProcessor dlProcessor = (DLProcessor) InstancePool.get(dlProcessorClassName);

      if (dlProcessor.isSupported(latestFileVersion)) {
        dlProcessor.trigger(latestFileVersion);
      }
    }

    for (DLProcessor dlProcessor : _dlProcessors) {
      if (dlProcessor.isSupported(latestFileVersion)) {
        dlProcessor.trigger(latestFileVersion);
      }
    }
  }

  public void unregister(DLProcessor dlProcessor) {
    ListUtil.remove(_dlProcessors, dlProcessor);
  }

  private FileVersion _getLatestFileVersion(FileEntry fileEntry) {
    FileVersion latestFileVersion = null;

    try {
      if (fileEntry.getModel() instanceof DLFileEntry) {
        DLFileEntry dlFileEntry = (DLFileEntry) fileEntry.getModel();

        latestFileVersion = new LiferayFileVersion(dlFileEntry.getLatestFileVersion(false));
      } else {
        latestFileVersion = fileEntry.getLatestFileVersion();
      }

      return latestFileVersion;
    } catch (Exception e) {
      _log.error(e, e);

      return null;
    }
  }

  private static final String[] _DL_FILE_ENTRY_PROCESSORS =
      PropsUtil.getArray(PropsKeys.DL_FILE_ENTRY_PROCESSORS);

  private static Log _log = LogFactoryUtil.getLog(DLProcessorRegistryImpl.class);

  private List<DLProcessor> _dlProcessors = new CopyOnWriteArrayList<DLProcessor>();
}
コード例 #8
0
/**
 * @author Brian Wing Shun Chan
 * @author Miguel Pastor
 */
public class PortletURLUtil {

  public static PortletURL clone(
      LiferayPortletURL liferayPortletURL, String lifecycle, MimeResponse mimeResponse)
      throws PortletException {

    LiferayPortletURL newURLImpl = null;

    if (lifecycle.equals(PortletRequest.ACTION_PHASE)) {
      newURLImpl = (LiferayPortletURL) mimeResponse.createActionURL();
    } else if (lifecycle.equals(PortletRequest.RENDER_PHASE)) {
      newURLImpl = (LiferayPortletURL) mimeResponse.createRenderURL();
    }

    newURLImpl.setPortletId(liferayPortletURL.getPortletId());

    WindowState windowState = liferayPortletURL.getWindowState();

    if (windowState != null) {
      newURLImpl.setWindowState(windowState);
    }

    PortletMode portletMode = liferayPortletURL.getPortletMode();

    if (portletMode != null) {
      newURLImpl.setPortletMode(portletMode);
    }

    newURLImpl.setParameters(liferayPortletURL.getParameterMap());

    return newURLImpl;
  }

  public static PortletURL clone(PortletURL portletURL, MimeResponse mimeResponse)
      throws PortletException {

    LiferayPortletURL liferayPortletURL = (LiferayPortletURL) portletURL;

    return clone(liferayPortletURL, liferayPortletURL.getLifecycle(), mimeResponse);
  }

  public static PortletURL clone(PortletURL portletURL, String lifecycle, MimeResponse mimeResponse)
      throws PortletException {

    LiferayPortletURL liferayPortletURL = (LiferayPortletURL) portletURL;

    return clone(liferayPortletURL, lifecycle, mimeResponse);
  }

  public static PortletURL getCurrent(PortletRequest portletRequest, MimeResponse mimeResponse) {

    PortletURL portletURL = mimeResponse.createRenderURL();

    Enumeration<String> enu = portletRequest.getParameterNames();

    while (enu.hasMoreElements()) {
      String param = enu.nextElement();
      String[] values = portletRequest.getParameterValues(param);

      boolean addParam = true;

      // Don't set paramter values that are over 32 kb. See LEP-1755.

      for (int i = 0; i < values.length; i++) {
        if (values[i].length() > _CURRENT_URL_PARAMETER_THRESHOLD) {
          addParam = false;

          break;
        }
      }

      if (addParam) {
        portletURL.setParameter(param, values);
      }
    }

    return portletURL;
  }

  public static String getRefreshURL(HttpServletRequest request, ThemeDisplay themeDisplay) {

    StringBundler sb = new StringBundler(32);

    sb.append(themeDisplay.getPathMain());
    sb.append("/portal/render_portlet?p_l_id=");

    long plid = themeDisplay.getPlid();

    sb.append(plid);

    Portlet portlet = (Portlet) request.getAttribute(WebKeys.RENDER_PORTLET);

    String portletId = portlet.getPortletId();

    sb.append("&p_p_id=");
    sb.append(portletId);

    sb.append("&p_p_lifecycle=0&p_t_lifecycle=");
    sb.append(themeDisplay.getLifecycle());

    WindowState windowState = WindowState.NORMAL;

    if (themeDisplay.isStatePopUp()) {
      windowState = LiferayWindowState.POP_UP;
    } else {
      LayoutTypePortlet layoutTypePortlet = themeDisplay.getLayoutTypePortlet();

      if (layoutTypePortlet.hasStateMaxPortletId(portletId)) {
        windowState = WindowState.MAXIMIZED;
      } else if (layoutTypePortlet.hasStateMinPortletId(portletId)) {
        windowState = WindowState.MINIMIZED;
      }
    }

    sb.append("&p_p_state=");
    sb.append(windowState);

    sb.append("&p_p_mode=view&p_p_col_id=");

    String columnId = (String) request.getAttribute(WebKeys.RENDER_PORTLET_COLUMN_ID);

    sb.append(columnId);

    Integer columnPos = (Integer) request.getAttribute(WebKeys.RENDER_PORTLET_COLUMN_POS);

    sb.append("&p_p_col_pos=");
    sb.append(columnPos);

    Integer columnCount = (Integer) request.getAttribute(WebKeys.RENDER_PORTLET_COLUMN_COUNT);

    sb.append("&p_p_col_count=");
    sb.append(columnCount);

    if (portlet.isStatic()) {
      sb.append("&p_p_static=1");

      if (portlet.isStaticStart()) {
        sb.append("&p_p_static_start=1");
      }
    }

    sb.append("&p_p_isolated=1");

    String doAsUserId = themeDisplay.getDoAsUserId();

    if (Validator.isNotNull(doAsUserId)) {
      sb.append("&doAsUserId=");
      sb.append(HttpUtil.encodeURL(doAsUserId));
    }

    String currentURL = PortalUtil.getCurrentURL(request);

    sb.append("&currentURL=");
    sb.append(HttpUtil.encodeURL(currentURL));

    String ppid = ParamUtil.getString(request, "p_p_id");

    if (ppid.equals(portletId)) {
      String namespace = PortalUtil.getPortletNamespace(portletId);

      Map<String, String[]> parameters = request.getParameterMap();

      for (Map.Entry<String, String[]> entry : parameters.entrySet()) {
        String name = entry.getKey();

        if (!PortalUtil.isReservedParameter(name)
            && !name.equals("currentURL")
            && !isRefreshURLReservedParameter(name, namespace)) {

          String[] values = entry.getValue();

          for (int i = 0; i < values.length; i++) {
            sb.append(StringPool.AMPERSAND);
            sb.append(name);
            sb.append(StringPool.EQUAL);
            sb.append(HttpUtil.encodeURL(values[i]));
          }
        }
      }
    }

    String outerPortletId = PortalUtil.getOuterPortletId(request);

    if (outerPortletId != null) {
      sb.append(StringPool.AMPERSAND);
      sb.append("p_o_p_id");
      sb.append(StringPool.EQUAL);
      sb.append(HttpUtil.encodeURL(outerPortletId));
    }

    return sb.toString();
  }

  protected static boolean isRefreshURLReservedParameter(String parameter, String namespace) {

    if ((_PORTLET_URL_REFRESH_URL_RESERVED_PARAMETERS == null)
        || (_PORTLET_URL_REFRESH_URL_RESERVED_PARAMETERS.length == 0)) {

      return false;
    }

    for (int i = 0; i < _PORTLET_URL_REFRESH_URL_RESERVED_PARAMETERS.length; i++) {

      String reservedParameter = namespace.concat(_PORTLET_URL_REFRESH_URL_RESERVED_PARAMETERS[i]);

      if (parameter.equals(reservedParameter)) {
        return true;
      }
    }

    return false;
  }

  private static final int _CURRENT_URL_PARAMETER_THRESHOLD = 32768;

  private static final String[] _PORTLET_URL_REFRESH_URL_RESERVED_PARAMETERS =
      PropsUtil.getArray(PropsKeys.PORTLET_URL_REFRESH_URL_RESERVED_PARAMETERS);
}
コード例 #9
0
  protected static void setHeaders(
      HttpServletRequest request,
      HttpServletResponse response,
      String fileName,
      String contentType) {

    if (_log.isDebugEnabled()) {
      _log.debug("Sending file of type " + contentType);
    }

    // LEP-2201

    if (Validator.isNotNull(contentType)) {
      response.setContentType(contentType);
    }

    response.setHeader(HttpHeaders.CACHE_CONTROL, HttpHeaders.CACHE_CONTROL_PUBLIC_VALUE);
    response.setHeader(HttpHeaders.PRAGMA, HttpHeaders.PRAGMA_PUBLIC_VALUE);

    if (Validator.isNotNull(fileName)) {
      String contentDisposition = "attachment; filename=\"" + fileName + "\"";

      // If necessary for non-ASCII characters, encode based on RFC 2184.
      // However, not all browsers support RFC 2184. See LEP-3127.

      boolean ascii = true;

      for (int i = 0; i < fileName.length(); i++) {
        if (!Validator.isAscii(fileName.charAt(i))) {
          ascii = false;

          break;
        }
      }

      try {
        if (!ascii) {
          String encodedFileName = HttpUtil.encodeURL(fileName, true);

          if (BrowserSnifferUtil.isIe(request)) {
            contentDisposition = "attachment; filename=\"" + encodedFileName + "\"";
          } else {
            contentDisposition = "attachment; filename*=UTF-8''" + encodedFileName;
          }
        }
      } catch (Exception e) {
        if (_log.isWarnEnabled()) {
          _log.warn(e);
        }
      }

      String extension = GetterUtil.getString(FileUtil.getExtension(fileName)).toLowerCase();

      String[] mimeTypesContentDispositionInline = null;

      try {
        mimeTypesContentDispositionInline =
            PropsUtil.getArray("mime.types.content.disposition.inline");
      } catch (Exception e) {
        mimeTypesContentDispositionInline = new String[0];
      }

      if (ArrayUtil.contains(mimeTypesContentDispositionInline, extension)) {

        contentDisposition = StringUtil.replace(contentDisposition, "attachment; ", "inline; ");
      }

      response.setHeader(HttpHeaders.CONTENT_DISPOSITION, contentDisposition);
    }
  }
コード例 #10
0
/** @author Mika Koivisto */
@DoPrivileged
public class DLProcessorRegistryImpl implements DLProcessorRegistry {

  public void afterPropertiesSet() throws Exception {
    ClassLoader classLoader = ClassLoaderUtil.getPortalClassLoader();

    for (String dlProcessorClassName : _DL_FILE_ENTRY_PROCESSORS) {
      DLProcessor dlProcessor =
          (DLProcessor) InstanceFactory.newInstance(classLoader, dlProcessorClassName);

      dlProcessor.afterPropertiesSet();

      register(dlProcessor);
    }
  }

  @Override
  public void cleanUp(FileEntry fileEntry) {
    if (!DLProcessorThreadLocal.isEnabled()) {
      return;
    }

    Iterable<String> dlProcessorTypes = _dlProcessorServiceTrackerMap.keySet();

    for (String dlProcessorType : dlProcessorTypes) {
      DLProcessor dlProcessor = _dlProcessorServiceTrackerMap.getService(dlProcessorType);

      if (dlProcessor.isSupported(fileEntry.getMimeType())) {
        dlProcessor.cleanUp(fileEntry);
      }
    }
  }

  @Override
  public void cleanUp(FileVersion fileVersion) {
    if (!DLProcessorThreadLocal.isEnabled()) {
      return;
    }

    Iterable<String> dlProcessorTypes = _dlProcessorServiceTrackerMap.keySet();

    for (String dlProcessorType : dlProcessorTypes) {
      DLProcessor dlProcessor = _dlProcessorServiceTrackerMap.getService(dlProcessorType);

      if (dlProcessor.isSupported(fileVersion)) {
        dlProcessor.cleanUp(fileVersion);
      }
    }
  }

  @Override
  public void exportGeneratedFiles(
      PortletDataContext portletDataContext, FileEntry fileEntry, Element fileEntryElement)
      throws Exception {

    if ((fileEntry == null) || (fileEntry.getSize() == 0)) {
      return;
    }

    FileVersion latestFileVersion = _getLatestFileVersion(fileEntry, true);

    if (latestFileVersion == null) {
      return;
    }

    Iterable<String> dlProcessorTypes = _dlProcessorServiceTrackerMap.keySet();

    for (String dlProcessorType : dlProcessorTypes) {
      DLProcessor dlProcessor = _dlProcessorServiceTrackerMap.getService(dlProcessorType);

      if (dlProcessor.isSupported(latestFileVersion)) {
        dlProcessor.exportGeneratedFiles(portletDataContext, fileEntry, fileEntryElement);
      }
    }
  }

  @Override
  public DLProcessor getDLProcessor(String dlProcessorType) {
    return _dlProcessorServiceTrackerMap.getService(dlProcessorType);
  }

  @Override
  public void importGeneratedFiles(
      PortletDataContext portletDataContext,
      FileEntry fileEntry,
      FileEntry importedFileEntry,
      Element fileEntryElement)
      throws Exception {

    if ((importedFileEntry == null) || (importedFileEntry.getSize() == 0)) {
      return;
    }

    FileVersion fileVersion = importedFileEntry.getFileVersion();

    if (fileVersion == null) {
      return;
    }

    Iterable<String> dlProcessorTypes = _dlProcessorServiceTrackerMap.keySet();

    for (String dlProcessorType : dlProcessorTypes) {
      DLProcessor dlProcessor = _dlProcessorServiceTrackerMap.getService(dlProcessorType);

      if (dlProcessor.isSupported(fileVersion)) {
        dlProcessor.importGeneratedFiles(
            portletDataContext, fileEntry, importedFileEntry, fileEntryElement);
      }
    }
  }

  @Override
  public boolean isPreviewableSize(FileVersion fileVersion) {
    long fileEntryPreviewableProcessorMaxSize =
        PropsValues.DL_FILE_ENTRY_PREVIEWABLE_PROCESSOR_MAX_SIZE;

    try {
      fileEntryPreviewableProcessorMaxSize =
          PrefsPropsUtil.getLong(PropsKeys.DL_FILE_ENTRY_PREVIEWABLE_PROCESSOR_MAX_SIZE);
    } catch (Exception e) {
      _log.error(e, e);
    }

    if (fileEntryPreviewableProcessorMaxSize == 0) {
      return false;
    }

    if ((fileEntryPreviewableProcessorMaxSize > 0)
        && (fileVersion.getSize() > fileEntryPreviewableProcessorMaxSize)) {

      return false;
    }

    return true;
  }

  @Override
  public void register(DLProcessor dlProcessor) {
    Registry registry = RegistryUtil.getRegistry();

    ServiceRegistration<DLProcessor> previousServiceRegistration =
        _serviceRegistrations.remove(dlProcessor.getType());

    if (previousServiceRegistration != null) {
      previousServiceRegistration.unregister();
    }

    ServiceRegistration<DLProcessor> serviceRegistration =
        registry.registerService(DLProcessor.class, dlProcessor);

    _serviceRegistrations.put(dlProcessor.getType(), serviceRegistration);
  }

  @Override
  public void trigger(FileEntry fileEntry, FileVersion fileVersion) {
    trigger(fileEntry, fileVersion, false);
  }

  @Override
  public void trigger(FileEntry fileEntry, FileVersion fileVersion, boolean trusted) {

    if (!DLProcessorThreadLocal.isEnabled()) {
      return;
    }

    if ((fileEntry == null) || (fileEntry.getSize() == 0)) {
      return;
    }

    FileVersion latestFileVersion = _getLatestFileVersion(fileEntry, trusted);

    if (latestFileVersion == null) {
      return;
    }

    Iterable<String> dlProcessorTypes = _dlProcessorServiceTrackerMap.keySet();

    for (String dlProcessorType : dlProcessorTypes) {
      DLProcessor dlProcessor = _dlProcessorServiceTrackerMap.getService(dlProcessorType);

      if (dlProcessor.isSupported(latestFileVersion)) {
        dlProcessor.trigger(fileVersion, latestFileVersion);
      }
    }
  }

  @Override
  public void unregister(DLProcessor dlProcessor) {
    ServiceRegistration<DLProcessor> serviceRegistration =
        _serviceRegistrations.remove(dlProcessor.getType());

    serviceRegistration.unregister();
  }

  private FileVersion _getLatestFileVersion(FileEntry fileEntry, boolean trusted) {

    try {
      return fileEntry.getLatestFileVersion(trusted);
    } catch (Exception e) {
      _log.error(e, e);

      return null;
    }
  }

  private static final String[] _DL_FILE_ENTRY_PROCESSORS =
      PropsUtil.getArray(PropsKeys.DL_FILE_ENTRY_PROCESSORS);

  private static final Log _log = LogFactoryUtil.getLog(DLProcessorRegistryImpl.class);

  private final ServiceTrackerMap<String, DLProcessor> _dlProcessorServiceTrackerMap =
      ServiceTrackerCollections.openSingleValueMap(
          DLProcessor.class,
          null,
          new ServiceReferenceMapper<String, DLProcessor>() {

            @Override
            public void map(
                ServiceReference<DLProcessor> serviceReference, Emitter<String> emitter) {

              Registry registry = RegistryUtil.getRegistry();

              DLProcessor dlProcessor = registry.getService(serviceReference);

              try {
                emitter.emit(dlProcessor.getType());
              } finally {
                registry.ungetService(serviceReference);
              }
            }
          });

  private final StringServiceRegistrationMap<DLProcessor> _serviceRegistrations =
      new StringServiceRegistrationMapImpl<>();
}