Package com.dotmarketing.portlets.structure.model

Examples of com.dotmarketing.portlets.structure.model.Field


    //    }else{
    offset = offset<0?0:offset;
    String hostQuery = null;
    if(searchHost){
      Structure st = StructureCache.getStructureByVelocityVarName("Host");
      Field hostNameField = st.getFieldVar("hostName");
      List<Contentlet> list = null;
      try {
        list = APILocator.getContentletAPI().search("+structureInode:" + st.getInode() +
            " +working:true +" + hostNameField.getFieldContentlet() + ":" + hostName, 0, 0, null, user, respectFrontEndPermissions);
      } catch (Exception e) {
        Logger.error(PermissionedWebAssetUtil.class,e.getMessage(),e);
      }
      if(list!=null){
        if(list.size()>0){
View Full Code Here


                            fieldVelName = fieldName.substring(1);
                        }
            else{
              fieldVelName = fieldName;
            }
            Field thisField = null;

            for (Field fd : targetFields) {
              if (fd.getVelocityVarName().equals(fieldVelName) || fd.getFieldContentlet().equals(fieldVelName)) {
                fieldbcontentname=fd.getFieldContentlet();
                fieldVelocityVarName = fd.getVelocityVarName();
                isStructField=true;
                thisField = fd;
                break;
              }
            }

            String wildCard = " ";
            if(!fieldName.equals("languageId") && fieldbcontentname.startsWith("text") ){
              wildCard = ( fieldContentletNames.containsKey(fieldName) && fieldContentletNames.get(fieldName).equals(Field.FieldType.SELECT.toString()) ) ? " " : "*";
            }

            if( fieldbcontentname.startsWith("text") ){


              if(thisField.getFieldType().equals(Field.FieldType.KEY_VALUE.toString())){
                fieldValue = fieldValue.trim();
                boolean hasQuotes = fieldValue != null && fieldValue.length() > 1 && fieldValue.endsWith("\"") && fieldValue.startsWith("\"");
                if(hasQuotes){
                  fieldValue = fieldValue.replaceFirst("\"", "");
                  fieldValue = fieldValue.substring(0, fieldValue.length()-1);
                }


                try{
                  String[] splitter = fieldValue.split(":");
                  String metakey = "";
                  for(int x=0;x< splitter.length-1;x++){
                    metakey+= splitter[x];
                  }



                  metakey = VelocityUtil.convertToVelocityVariable(metakey);
                  String metaVal = "*" +splitter[splitter.length-1]+"*";
                  fieldValue = metakey + ":" + metaVal;
                  luceneQuery.append("+" + st.getVelocityVarName() + "." + fieldVelocityVarName + "." + fieldValue.toString().replaceAll(specialCharsToEscape, "\\\\$1") + " ");


                }
                catch(Exception e){

                }





              }else if( FieldFactory.isTagField(fieldbcontentname,st)== false){
//                String quotes = fieldValue.contains(" ") ? "\"" : "";
                fieldValue = fieldValue.trim();
                boolean hasQuotes = fieldValue != null && fieldValue.length() > 1 && fieldValue.endsWith("\"") && fieldValue.startsWith("\"");
                if(hasQuotes){
                  fieldValue = fieldValue.replaceFirst("\"", "");
                  fieldValue = fieldValue.substring(0, fieldValue.length()-1);
                }
                luceneQuery.append("+" + st.getVelocityVarName() + "." + fieldVelocityVarName + ":" + (hasQuotes ? "\"":wildCard) + ESUtils.escape(fieldValue.toString()) + (hasQuotes ? "\"":wildCard) + " ");
              }
              else{
                String[] splitValues = fieldValue.split(",");
                for(String splitValue : splitValues)
                {
                  splitValue = splitValue.trim();
                  String quotes = splitValue.contains(" ") ? "\"" : "";
                  luceneQuery.append("+" + st.getVelocityVarName() + "." + fieldVelocityVarName+ ":" + quotes + ESUtils.escape(splitValue.toString()) + quotes + " ");
                }
              }
            }
            else if( fieldbcontentname.startsWith("date") ){
              luceneQuery.append("+" + st.getVelocityVarName() +"."+ fieldVelocityVarName + ":" + fieldValue + " ");
            } else {
              if(isStructField==false){
                  String next =  fieldValue.toString();
                  if(!next.contains("'") && ! next.contains("\"")){
                      next = next.replaceAll("\\*", "");
                      while(next.contains("  ")){
                        next = next.replace("  ", " ");
                      }
                      String y[] = next.split(" ");
                      for(int j=0;j<y.length;j++){
                        y[j] = y[j].replaceAll(specialCharsToEscape, "\\\\$1");
                        if(fieldName.equals("languageId")){
                          luceneQuery.append("+" + fieldName +":" + y[j] + " ");
                        }else{
                          luceneQuery.append("+" + fieldName +":" + y[j] + "* ");
                        }
                      }
                  }else if(next.contains("\"")){
                     next = next.replaceAll("\\*", "");
                        while(next.contains("  ")){
                          next = next.replace("  ", " ");
                        }
                        String y[] = next.split(" ");
                        for(int j=0;j<y.length;j++){
                          y[j] = y[j].replaceAll(specialCharsToEscape, "\\\\$1");
                          luceneQuery.append("+" + fieldName +":" + y[j] + "* ");
                        }
                  }else{
                      luceneQuery.append("+" + fieldName +":" + next + " ");
                 }
              }
              else {
                luceneQuery.append("+" + st.getVelocityVarName() +"."+ fieldVelocityVarName + ":" + fieldValue.toString() + wildCard + " ");
              }
            }

        }
      }
    }

    if(UtilMethods.isSet(categoriesvalues)){
      luceneQuery.append("+(" + categoriesvalues + ") " );
    }

    lastSearchMap.put("fieldsSearch", fieldsSearch);

    //for (String cat : categories) {
    //  luceneQuery.append("+c" + cat + "c:on ");
    //}

    lastSearchMap.put("categories", categories);

    //Adding the headers as the second row of the results
    for (Field f : targetFields) {
        if (f.isListed()) {
            fieldsMapping.put(f.getVelocityVarName(), f);
            headers.add(f.getMap());
        }
    }

    if (!UtilMethods.isSet(orderBy)){
      orderBy = "modDate desc";
    }

    lastSearchMap.put("showDeleted", showDeleted);
    lastSearchMap.put("filterSystemHost", filterSystemHost);
    lastSearchMap.put("filterLocked", filterLocked);
    lastSearchMap.put("filterUnpublish", filterUnpublish);


    if(!showDeleted)
      luceneQuery.append("+deleted:false ");
    else
      luceneQuery.append("+deleted:true ");
    lastSearchMap.put("page", page);


    if(filterLocked)
      luceneQuery.append("+locked:true ");

    if(filterUnpublish)
      luceneQuery.append("+live:false ");

    /*if we have a date*/
    if(modDateFrom!=null || modDateTo!=null){
      String dates =" +modDate:[";
      dates+= (modDateFrom!=null) ? modDateFrom : "18000101000000";
      dates+= " TO ";
      dates+= (modDateTo!=null)? modDateTo : "30000101000000";
      dates+="]";
      luceneQuery.append(dates);
    }


    int offset = 0;
    if (page != 0)
      offset = perPage * (page - 1);

    lastSearchMap.put("orderBy", orderBy);

    luceneQuery.append(" +working:true");

    //Executing the query
    long before = System.currentTimeMillis();
    PaginatedArrayList <Contentlet> hits = new PaginatedArrayList <Contentlet>();
    long totalHits=0;
    try{
      hits = (PaginatedArrayList<Contentlet>) conAPI.search(luceneQuery.toString(), perPage + 1, offset, orderBy, currentUser, false);
      totalHits = hits.getTotalResults();
    }catch (Exception pe) {
      Logger.error(ContentletAjax.class, "Unable to execute Lucene Query", pe);
    }
    long after = System.currentTimeMillis();
    Logger.debug(ContentletAjax.class, "searchContentletsByUser: Time to search on lucene =" + (after - before) + " ms.");


    before = System.currentTimeMillis();

    //The reesults list returned to the page
    List<Object> results = new ArrayList<Object>();

    //Adding the result counters as the first row of the results
    Map<String, Object> counters = new HashMap<String, Object>();
    results.add(counters);


    if (headers.size() == 0) {
      Map<String, String> fieldMap = new HashMap<String, String> ();
      fieldMap.put("fieldVelocityVarName", "__title__");
      fieldMap.put("fieldName", "Title");
      headers.add(fieldMap);
      fieldMap = new HashMap<String, String> ();
      fieldMap.put("fieldVelocityVarName", "__type__");
      fieldMap.put("fieldName", "Type");
      headers.add(fieldMap);
    }
    results.add(headers);

    // we add the total hists for the query
    results.add(totalHits);

    List<String> expiredInodes=new ArrayList<String>();

    //Adding the query results
    Contentlet con;
    for (int i = 0; ((i < perPage) && (i < hits.size())); ++i) {
      con = hits.get(i);

      if(!con.isLive()) {
          Identifier ident=APILocator.getIdentifierAPI().find(con);
          if(UtilMethods.isSet(ident.getSysExpireDate()) && ident.getSysExpireDate().before(new Date()))
              expiredInodes.add(con.getInode()); // it is unpublished and can't be manualy published
      }

      Map<String, String> searchResult = new HashMap<String, String>();

      for (String fieldContentlet : fieldsMapping.keySet()) {
        String fieldValue = null;
        if(con.getMap() != null && con.getMap().get(fieldContentlet) !=null){
          fieldValue =(con.getMap().get(fieldContentlet)).toString();
        }
        Field field = (Field) fieldsMapping.get(fieldContentlet);
        if (UtilMethods.isSet(fieldValue) && field.getFieldType().equals(Field.FieldType.DATE.toString()) ||
            UtilMethods.isSet(fieldValue) && field.getFieldType().equals(Field.FieldType.TIME.toString()) ||
            UtilMethods.isSet(fieldValue) && field.getFieldType().equals(Field.FieldType.DATE_TIME.toString())) {
          try {
            Date date = DateUtil.convertDate(fieldValue, new String[] { "yyyy-MM-dd HH:mm:ss", "E MMM dd HH:mm:ss z yyyy" });
            if (field.getFieldType().equals(Field.FieldType.DATE.toString()))
              fieldValue = UtilMethods.dateToHTMLDate(date);
            if (field.getFieldType().equals(Field.FieldType.TIME.toString()))
              fieldValue = UtilMethods.dateToHTMLTime(date);
            if (field.getFieldType().equals(Field.FieldType.DATE_TIME.toString()))
              fieldValue = UtilMethods.dateToHTMLDate(date) + " " + UtilMethods.dateToHTMLTime(date);
          } catch (java.text.ParseException e) {
            Logger.error(ContentletAjax.class, e.getMessage(), e);
            throw new DotRuntimeException(e.getMessage(), e);
          }
        }else if (field.getFieldType().equals(Field.FieldType.CHECKBOX.toString()) || field.getFieldType().equals(Field.FieldType.MULTI_SELECT.toString())) {
          if (UtilMethods.isSet(fieldValue))
            fieldValue = fieldValue.replaceAll("# #",",").replaceAll("#","");
        }
        searchResult.put(fieldContentlet, fieldValue);
      }
View Full Code Here

      Logger.error(this,"Contentlet failed while creating new binary content",e);
    }

    // clean up tmp_binary
    if(newCont !=null ) {
        Field field = FieldsCache.getField(fieldInode);
          if(field.getFieldType().equals(FieldType.BINARY.toString())) {
              File tmp=new File(APILocator.getFileAPI().getRealAssetPathTmpBinary()
                      +File.separator+user.getUserId()+File.separator+field.getFieldContentlet());
              FileUtil.deltree(tmp);
          }
    }

    if(UtilMethods.isSet(newCont.getInode())){
View Full Code Here

   * @return
   */
  public Object get(String fieldVariableName) {
    try {
      Object ret = null;
      Field f = retriveField(fieldVariableName);
      if(f==null){
        if(fieldVariableName.equalsIgnoreCase("host")){
          try{
            return new ContentMap(conAPI.search("+type:content +live:true +deleted:false +identifier:" + content.getHost() , 1, -1, "modDate", user, true).get(0), user, EDIT_OR_PREVIEW_MODE, host,context);
          }catch (IndexOutOfBoundsException e) {
            Logger.debug(this, "Unable to get host on content");
            return null;
          }
        }else if(fieldVariableName.equalsIgnoreCase("title")){
          ret =  getContentletsTitle();
        }else if(fieldVariableName.equalsIgnoreCase("structure")){
          return getStructure();
        //http://jira.dotmarketing.net/browse/DOTCMS-6033
        }else if(fieldVariableName.contains("FileURI")){
          f = retriveField(fieldVariableName.replaceAll("FileURI", ""));
          if(f!=null && (f.getFieldType()!= null && f.getFieldType().equals(Field.FieldType.FILE.toString())
              || f.getFieldType().equals(Field.FieldType.IMAGE.toString()))){
            String fid = (String)conAPI.getFieldValue(content, f);
            if(!UtilMethods.isSet(fid)){
              return null;
            }
            Identifier i = APILocator.getIdentifierAPI().find(fid);
            IFileAsset file = null;
            String p = "";
            if (EDIT_OR_PREVIEW_MODE){
              p = WorkingCache.getPathFromCache(i.getURI(),InodeUtils.isSet(i.getHostId())?i.getHostId():host.getIdentifier());
            }else{
              p = LiveCache.getPathFromCache(i.getURI(),InodeUtils.isSet(i.getHostId())?i.getHostId():host.getIdentifier());
            }
            p = p.substring(5, p.lastIndexOf("."));
            if(i!=null && InodeUtils.isSet(i.getId()) && i.getAssetType().equals("contentlet")){
              return i.getPath();
            }
            file = fileAPI.find(p,user,false);
            if(file != null && UtilMethods.isSet(file.getInode())){
              return ((File)file).getURI();
            }else{
              return null;
            }
          }else{
            return null;
          }
        }else{
          return content.getMap().get(fieldVariableName);
        }
      }
      if(f != null && f.getFieldType().equals(Field.FieldType.CATEGORY.toString())){
        return perAPI.filterCollection(new ArrayList<Category>((Set<Category>)conAPI.getFieldValue(content, f)), PermissionAPI.PERMISSION_USE, true, user);
      }else if(f != null && (f.getFieldType().equals(Field.FieldType.FILE.toString()) || f.getFieldType().equals(Field.FieldType.IMAGE.toString()))){
        String fid = (String)conAPI.getFieldValue(content, f);
        if(!UtilMethods.isSet(fid)){
          return null;
        }
        Identifier i = APILocator.getIdentifierAPI().find(fid);
        FileMap fm = new FileMap();
        IFileAsset file = null;
        if (EDIT_OR_PREVIEW_MODE){
          String p = WorkingCache.getPathFromCache(i.getURI(), InodeUtils.isSet(i.getHostId())?i.getHostId():host.getIdentifier());
          p = p.substring(5, p.lastIndexOf("."));
          if(i!=null && InodeUtils.isSet(i.getId()) && i.getAssetType().equals("contentlet")){
            Contentlet fileAsset  = APILocator.getContentletAPI().find(p.substring(0, p.indexOf(java.io.File.separator)), user!=null?user:APILocator.getUserAPI().getAnonymousUser(), false);
            if(fileAsset != null && UtilMethods.isSet(fileAsset.getInode())){
                FileAssetMap fam=new FileAssetMap();
                            FileAsset fa=APILocator.getFileAssetAPI().fromContentlet(fileAsset);
                            fam.setBinary(FileAssetAPI.BINARY_FIELD, fa.getFileAsset());
                            BeanUtils.copyProperties(fam, fa);
                            return fam;
                //return new ContentMap(fileAsset, user, EDIT_OR_PREVIEW_MODE,host,context);
            }
          }else{
            file = fileAPI.find(p,user,true);
          }
//          file = (File)APILocator.getVersionableAPI().findWorkingVersion(i, File.class);
        }else{
          String p = LiveCache.getPathFromCache(i.getURI(),InodeUtils.isSet(i.getHostId())?i.getHostId():host.getIdentifier());
          p = p.substring(5, p.lastIndexOf("."));
          if(i!=null && InodeUtils.isSet(i.getId()) && i.getAssetType().equals("contentlet")){
            Contentlet fileAsset  = APILocator.getContentletAPI().find(p.substring(0, p.indexOf(java.io.File.separator)), user!=null?user:APILocator.getUserAPI().getAnonymousUser(), false);
            if(fileAsset != null && UtilMethods.isSet(fileAsset.getInode())){
              FileAssetMap fam=new FileAssetMap();
              FileAsset fa=APILocator.getFileAssetAPI().fromContentlet(fileAsset);
              fam.setBinary(FileAssetAPI.BINARY_FIELD, fa.getFileAsset());
              BeanUtils.copyProperties(fam, fa);
              return fam;
                //return new ContentMap(fileAsset, user, EDIT_OR_PREVIEW_MODE,host,context);
            }
          }else{
            file = fileAPI.find(p,user,true);
          }
//          file = (File) APILocator.getVersionableAPI().findLiveVersion(i, File.class);
        }
        if(file != null && UtilMethods.isSet(file.getInode())){
          BeanUtils.copyProperties(fm, file);
          return fm;
        }else{
          return null;
        }
      }else if(f != null && f.getFieldType().equals(Field.FieldType.BINARY.toString())){
          if(content.getStructure().getStructureType()==Structure.STRUCTURE_TYPE_FILEASSET && f.getVelocityVarName().equalsIgnoreCase("fileasset")) {
              // http://jira.dotmarketing.net/browse/DOTCMS-7406
              FileAssetMap fam=new FileAssetMap();
              FileAsset fa=APILocator.getFileAssetAPI().fromContentlet(content);
              fam.setBinary(FileAssetAPI.BINARY_FIELD, fa.getFileAsset());
                    BeanUtils.copyProperties(fam, fa);
                    return fam;
          }
          else {
            BinaryMap bm = new BinaryMap(content,f);
            return bm;
          }
      }else if(f != null && f.getFieldType().equals(Field.FieldType.TAG.toString())){
        return new TagList((String)conAPI.getFieldValue(content, f));
      }else if(f != null && f.getFieldType().equals(Field.FieldType.HOST_OR_FOLDER.toString())){
        if(FolderAPI.SYSTEM_FOLDER.equals(content.getFolder())){
          try{
            return new ContentMap(conAPI.search("+type:content +live:true +deleted:false +identifier:" + content.getHost(),1,-1,"modDate",user,true).get(0),user, EDIT_OR_PREVIEW_MODE, host, context);
          }catch (IndexOutOfBoundsException e) {
            Logger.debug(this, "Unable to get host on content");
            return null;
          }
        }else{
          return APILocator.getFolderAPI().find(content.getFolder(), user, true);
        }
      }else if(f != null && f.getFieldType().equals(Field.FieldType.SELECT.toString())){
        return new SelectMap(f, content);
      }else if(f != null && f.getFieldType().equals(Field.FieldType.RADIO.toString())){
        return new RadioMap(f, content);
      }else if(f != null && f.getFieldType().equals(Field.FieldType.MULTI_SELECT.toString())){
        return new MultiSelectMap(f, content);
      }else if(f != null && f.getFieldType().equals(Field.FieldType.CHECKBOX.toString())){
        return new CheckboxMap(f, content);
      }else if(f != null && f.getFieldType().equals(Field.FieldType.KEY_VALUE.toString())){
          final String jsonData=(String)conAPI.getFieldValue(content, f);
        Map<String,Object> keyValueMap = KeyValueFieldUtil.JSONValueToHashMap(jsonData);
        //needs to be ordered
        Map<String,Object> retMap = new java.util.LinkedHashMap<String,Object>() {
            @Override
            public String toString() {
                return jsonData;
            }
        };
        for(String key :keyValueMap.keySet()){
          retMap.put(key.replaceAll("\\W",""), keyValueMap.get(key));
        }
        retMap.put("keys", retMap.keySet());
        retMap.put("map", keyValueMap);
        return retMap;
      }

      //ret could have been set by title
      if(ret == null){
        ret = conAPI.getFieldValue(content, f);
      }

      //handle Velicty Code
      if(ret != null && (f == null || f.getFieldType().equals(Field.FieldType.TEXT.toString()) || f.getFieldType().equals(Field.FieldType.TEXT_AREA.toString()) || f.getFieldType().equals(Field.FieldType.CUSTOM_FIELD.toString()) || f.getFieldType().equals(Field.FieldType.WYSIWYG.toString())) && (ret.toString().contains("#") || ret.toString().contains("$"))){
        VelocityEngine ve = VelocityUtil.getEngine();
        Template template = null;
        StringWriter sw = new StringWriter();
        VelocityServlet.velocityCtx.set(context);
        template = ve.getTemplate((EDIT_OR_PREVIEW_MODE ? "working/":"live/") + content.getInode() + "_" + f.getInode() + "." + Config.getStringProperty("VELOCITY_FIELD_EXTENSION"));
        template.merge(context, sw);
        ret = sw.toString();
      }
      return ret;
    } catch (Exception e) {
View Full Code Here

  public void createBaseFormFields(Structure structure) throws DotDataException,DotStateException {
    if(!InodeUtils.isSet(structure.getInode())){
      throw new DotStateException("Cannot create base forms fields on a structure that doesn't exist");
    }

    Field titleField = new Field(FORM_TITLE_FIELD_NAME,Field.FieldType.HIDDEN,Field.DataType.TEXT,structure,false,false,false,1,"", "", "", true, true, true);
    titleField.setFieldContentlet(FieldAPI.ELEMENT_CONSTANT);
    FieldFactory.saveField(titleField);

    Field emailField = new Field(FORM_EMAIL_FIELD_NAME,Field.FieldType.HIDDEN,Field.DataType.TEXT,structure,false,false,false,2,"", "", "", true, true, true);
    emailField.setFieldContentlet(FieldAPI.ELEMENT_CONSTANT);
    FieldFactory.saveField(emailField);

    Field returnpageField = new Field(FORM_RETURN_PAGE_FIELD_NAME,Field.FieldType.HIDDEN,Field.DataType.TEXT,structure,false,false,false,3,"", "", "", true, true, true);
    returnpageField.setFieldContentlet(FieldAPI.ELEMENT_CONSTANT);
    FieldFactory.saveField(returnpageField);
   
    Field hostField = new Field(FORM_HOST_FIELD_NAME,Field.FieldType.HOST_OR_FOLDER,Field.DataType.TEXT,structure,false,false,true,4,"", "", "", true, true, true);
    FieldFactory.saveField(hostField);

    FieldsCache.clearCache();
  }
View Full Code Here

    StructureCache.removeStructure(structure);
    StructureCache.addStructure(structure);
    StructureServices.removeStructureFile(structure);

    /*Adding Widget Fields*/
    Field formIdField = new Field(FORM_WIDGET_FORM_ID_FIELD_NAME,Field.FieldType.TEXT,Field.DataType.TEXT,structure,true,true,true,1,"", "", "", true, false, true);
    FieldFactory.saveField(formIdField);

    Field codeField = new Field(FORM_WIDGET_CODE_FIELD_NAME,Field.FieldType.TEXT_AREA,Field.DataType.TEXT,structure,true,false,false,3,"", "", "", true, false, true);
    codeField.setDefaultValue("#submitContent(\"${formId}\")");
    FieldFactory.saveField(codeField);
    FieldsCache.clearCache();

  }
View Full Code Here

    _loadForm(form, req, res);
    setForward(req, "portlet.ext.structure.edit_field");
  }

  private void _retrieveField(ActionForm form, ActionRequest req, ActionResponse res) {
    Field field = new Field();
    String inodeString = req.getParameter("inode");
    if (InodeUtils.isSet(inodeString)) {
      /*
       * long inode = Long.parseLong(inodeString); if (inode != 0) { field =
       * FieldFactory.getFieldByInode(inode); }
       */
      if (InodeUtils.isSet(inodeString)) {
        field = FieldFactory.getFieldByInode(inodeString);
      } else {
        String structureInode = req.getParameter("structureInode");
        field.setStructureInode(structureInode);
      }
    } else {
      String structureInode = req.getParameter("structureInode");
      field.setStructureInode(structureInode);
    }

    if (field.isFixed()) {

      String message = "warning.object.isfixed";
      SessionMessages.add(req, "message", message);

    }
View Full Code Here

  }

  private boolean _saveField(ActionForm form, ActionRequest req, ActionResponse res, User user) {
    try {
      FieldForm fieldForm = (FieldForm) form;
      Field field = (Field) req.getAttribute(WebKeys.Field.FIELD);
      Structure structure = StructureCache.getStructureByInode(field.getStructureInode());
      boolean isNew = false;
      boolean wasIndexed = field.isIndexed();


      //http://jira.dotmarketing.net/browse/DOTCMS-5918
      HttpServletRequest httpReq = ((ActionRequestImpl) req).getHttpServletRequest();
      try {
          _checkUserPermissions(structure, user, PERMISSION_PUBLISH);
      } catch (Exception ae) {
        if (ae.getMessage().equals(WebKeys.USER_PERMISSIONS_EXCEPTION)) {
          SessionMessages.add(httpReq, "message", "message.insufficient.permissions.to.save");
        }
        throw ae;
      }

      String dataType = fieldForm.getDataType();

      if (fieldForm.isListed()) {
        fieldForm.setIndexed(true);
      }

      if (fieldForm.isSearchable()) {
        fieldForm.setIndexed(true);
      }

      if (fieldForm.isUnique()) {
        fieldForm.setRequired(true);
        fieldForm.setIndexed(true);
      }

      BeanUtils.copyProperties(field, fieldForm);

      //To validate values entered for decimal/number type check box field
      //http://jira.dotmarketing.net/browse/DOTCMS-5516

      if (field.getFieldType().equals(Field.FieldType.CHECKBOX.toString())){
        String values = fieldForm.getValues();
                String temp = values.replaceAll("\r\n","|");
                String[] tempVals = StringUtil.split(temp.trim(), "|");
                try {
            if(dataType.equals(Field.DataType.FLOAT.toString())){
              if(values.indexOf("\r\n") > -1) {
                SessionMessages.add(req, "error", "message.structure.invaliddatatype");
                  return false;
              }

              for(int i=1;i<tempVals.length;i+= 2){
                Float.parseFloat(tempVals[i]);
              }
            }else if(dataType.equals(Field.DataType.INTEGER.toString())){
              if(values.indexOf("\r\n") > -1) {
                SessionMessages.add(req, "error", "message.structure.invaliddatatype");
                  return false;
              }

              for(int i=1;i<tempVals.length;i+= 2){
                  Integer.parseInt(tempVals[i]);
              }
            }

          }catch (Exception e) {
                  String message = "message.structure.invaliddata";
            SessionMessages.add(req, "error", message);
            return false;
         }
      }

      // check if is a new field to add at the botton of the structure
      // field list
      if (!InodeUtils.isSet(fieldForm.getInode())) {
        isNew = true;
        int sortOrder = 0;
        List<Field> fields = FieldsCache.getFieldsByStructureInode(structure.getInode());
        for (Field f : fields) {
          // http://jira.dotmarketing.net/browse/DOTCMS-3232
          if (f.getFieldType().equalsIgnoreCase(fieldForm.getFieldType())
              && f.getFieldType().equalsIgnoreCase(Field.FieldType.HOST_OR_FOLDER.toString())) {
            SessionMessages.add(req, "error", "message.structure.duplicate.host_or_folder.field");
            return false;
          }
          if (f.getSortOrder() > sortOrder)
            sortOrder = f.getSortOrder();
        }
        field.setSortOrder(sortOrder + 1);
        field.setFixed(false);
        field.setReadOnly(false);

        String fieldVelocityName = VelocityUtil.convertToVelocityVariable(fieldForm.getFieldName(), false);
        int found = 0;
        if (VelocityUtil.isNotAllowedVelocityVariableName(fieldVelocityName)) {
          found++;
        }

        String velvar;
        for (Field f : fields) {
          velvar = f.getVelocityVarName();
          if (velvar != null) {
            if (fieldVelocityName.equals(velvar)) {
              found++;
            } else if (velvar.contains(fieldVelocityName)) {
              String number = velvar.substring(fieldVelocityName.length());
              if (RegEX.contains(number, "^[0-9]+$")) {
                found++;
              }
            }
          }
        }
        if (found > 0) {
          fieldVelocityName = fieldVelocityName + Integer.toString(found);
        }

        //http://jira.dotmarketing.net/browse/DOTCMS-5616
        if(!validateInternalFieldVelocityVarName(fieldVelocityName)){
          fieldVelocityName+="1";
        }

        field.setVelocityVarName(fieldVelocityName);
      }

      if (!field.isFixed() && !field.isReadOnly()) {
        // gets the data type from the contentlet: bool, date, text, etc

        String prevDataType = (field.getFieldContentlet() != null) ? field.getFieldContentlet().replaceAll(
            "[0-9]*", "") : "";

        if (field.getFieldType().equals("categories_tab") || field.getFieldType().equals("permissions_tab")
            || field.getFieldType().equals("relationships_tab")) {

          List<Field> structureFields = FieldsCache.getFieldsByStructureInode(structure.getInode());
          for (Field f : structureFields) {
            if (f.getFieldType().equals("categories_tab") && field.getFieldType().equals("categories_tab")
                && !f.getInode().equals(field.getInode())) {
              String message = "message.structure.duplicate.categories_tab";
              SessionMessages.add(req, "error", message);
              return false;

            } else if (f.getFieldType().equals("permissions_tab")
                && field.getFieldType().equals("permissions_tab")
                && !f.getInode().equals(field.getInode())) {
              String message = "message.structure.duplicate.permissions_tab";
              SessionMessages.add(req, "error", message);
              return false;

            } else if (f.getFieldType().equals("relationships_tab")
                && field.getFieldType().equals("relationships_tab")
                && !f.getInode().equals(field.getInode())) {
              String message = "message.structure.duplicate.relationships_tab";
              SessionMessages.add(req, "error", message);
              return false;

            }
          }

        }

        if (!(field.getFieldType().equals("host or folder") || field.getFieldType().equals("line_divider") || field.getFieldType().equals("tab_divider")
            || field.getFieldType().equals("categories_tab")
            || field.getFieldType().equals("permissions_tab") || field.getFieldType().equals(
            "relationships_tab"))
            && !UtilMethods.isSet(fieldForm.getDataType())) {
          // it's either an image, file or link so there is no
          // datatype
          field.setFieldContentlet("");
        }

        if (!UtilMethods.isSet(fieldForm.getDataType())) {
          // it's either an image, file or link so there is no
          // datatype
          if (!field.getFieldType().equals("host or folder")){
              field.setFieldContentlet("");
            }

        } else if (!prevDataType.equals(fieldForm.getDataType())) {
          String fieldContentlet = FieldFactory.getNextAvaliableFieldNumber(dataType, field.getInode(), field
              .getStructureInode());
          if (fieldContentlet == null) {
            // didn't find any empty ones, so im throwing an error
            // to the user to select a new one
            String message = "message.structure.nodatatype";
            SessionMessages.add(req, "error", message);
            return false;
          }
          field.setFieldContentlet(fieldContentlet);
        }

        if (field.getFieldType().equalsIgnoreCase(Field.FieldType.CATEGORY.toString())) {
          field.setValues(req.getParameter("categories"));
          field.setIndexed(true);

          // validate if a field with the same category already exists
          List<Field> stFields = FieldsCache.getFieldsByStructureInode(field.getStructureInode());
          for (Field stField : stFields) {
            if(stField.getFieldType().equalsIgnoreCase(Field.FieldType.CATEGORY.toString())
                && UtilMethods.isSet(stField.getValues())
                && stField.getValues().equals(field.getValues())
                && !stField.getInode().equals(field.getInode())) {
              SessionMessages.add(httpReq, "message", "message.category.existing.field");
              return false;
            }
          }

          if (UtilMethods.isSet(fieldForm.getDefaultValue())) {
            List<Category> selectedCategoriesList = new ArrayList<Category>();
            String[] selectedCategories = fieldForm.getDefaultValue().trim().split("\\|");
            for (String cat : selectedCategories) {
              selectedCategoriesList.add(categoryAPI.findByName(cat, user, false));
            }
            Category category = categoryAPI.find(req.getParameter("categories"), user, false);
            List<Category> childrenCategories = categoryAPI.getChildren(category, user, false);
            if (!childrenCategories.containsAll(selectedCategoriesList)) {
              String message = "error.invalid.child.category";
              SessionMessages.add(req, "error", message);
              return false;
            }
          }

        }

        if (field.getFieldType().equalsIgnoreCase(Field.FieldType.TAG.toString()) || field.isSearchable()) {
          field.setIndexed(true);
        }
      }

      if (fieldForm.getElement().equals(FieldAPI.ELEMENT_CONSTANT) || fieldForm.getFieldType().equals(FieldAPI.ELEMENT_CONSTANT)) {
        field.setFieldContentlet(FieldAPI.ELEMENT_CONSTANT);
        field.setValues(fieldForm.getValues());
      }

      boolean isUpdating = UtilMethods.isSet(field.getInode());
      // saves this field
      FieldFactory.saveField(field);

      if(isUpdating) {
        ActivityLogger.logInfo(ActivityLogger.class, "Update Field Action", "User " + _getUser(req).getUserId() + "/" + _getUser(req).getFirstName() + " modified field " + field.getFieldName() + " to " + structure.getName()
              + " Structure.", HostUtil.hostNameUtil(req, _getUser(req)));
      } else {
        ActivityLogger.logInfo(ActivityLogger.class, "Save Field Action", "User " + _getUser(req).getUserId() + "/" + _getUser(req).getFirstName() + " added field " + field.getFieldName() + " to " + structure.getName()
              + " Structure.", HostUtil.hostNameUtil(req, _getUser(req)));
      }

      FieldsCache.removeFields(structure);
      StructureCache.removeStructure(structure);
      StructureServices.removeStructureFile(structure);
      StructureFactory.saveStructure(structure);

      FieldsCache.addFields(structure, structure.getFields());

      //Refreshing permissions
      PermissionAPI perAPI = APILocator.getPermissionAPI();
      if(field.getFieldType().equals("host or folder")) {
        perAPI.resetChildrenPermissionReferences(structure);
      }

        //http://jira.dotmarketing.net/browse/DOTCMS-5178
      if(!isNew && ((!wasIndexed && fieldForm.isIndexed()) || (wasIndexed && !fieldForm.isIndexed()))){
        // rebuild contentlets indexes
        conAPI.reindex(structure);
      }

      if (fAPI.isElementConstant(field)) {
        ContentletServices.removeContentletFile(structure);
        ContentletMapServices.removeContentletMapFile(structure);
        conAPI.refresh(structure);
      }

      String message = "message.structure.savefield";
      SessionMessages.add(req, "message", message);
      AdminLogger.log(EditFieldAction.class, "_saveField","Added field " + field.getFieldName() + " to " + structure.getName() + " Structure.", user);
      return true;
    } catch (Exception ex) {
      Logger.error(EditFieldAction.class, ex.toString(), ex);
    }
    return false;
View Full Code Here

  {
    List fields = structure.getFields();
    int total = 0;
    for(int i = 0; i < fields.size();i++)
    {
      Field field = (Field) fields.get(i);
      if(field.getFieldType().equals(typeField))
      {
        total++;
      }
    }
    return total;
View Full Code Here

      st.setStructureType(Structure.STRUCTURE_TYPE_CONTENT);
      st.setDescription("Default CMS Content Structure");
      st.setName("Web Page Content");
      StructureFactory.saveStructure(st);

      Field field = new Field ();
      field.setDefaultValue("");
      field.setFieldContentlet("text1");
      field.setFieldName("Title");
      field.setFieldType(Field.FieldType.TEXT.toString());
      field.setHint("");
      field.setRegexCheck("");
      field.setRequired(true);
      field.setSortOrder(0);
      field.setStructureInode(st.getInode());
      field.setFieldRelationType("");
      field.setVelocityVarName("ContentletTitle");
      field.setIndexed(true);
      field.setSearchable(true);
      field.setListed(true);
      field.setFixed(false);
      field.setReadOnly(false);
      FieldFactory.saveField(field);


      field = new Field ();
      field.setDefaultValue("");
      field.setFieldContentlet("text_area1");
      field.setFieldName("Body");
      field.setFieldType(Field.FieldType.WYSIWYG.toString());
      field.setHint("");
      field.setRegexCheck("");
      field.setRequired(true);
      field.setSortOrder(8);
      field.setStructureInode(st.getInode());
      field.setFieldRelationType("");
      field.setIndexed(true);
      field.setVelocityVarName("Body");
      field.setFixed(false);
      field.setReadOnly(false);
      FieldFactory.saveField(field);



      /* Let's create a News Items structure as well */

      st = new Structure();
      st.setName("News Item");
      st.setDescription("News Items and Press Releases");
      st.setFixed(false);
      st.setStructureType(Structure.STRUCTURE_TYPE_CONTENT);
      StructureFactory.saveStructure(st);

      field = new Field ();
      field.setDefaultValue("");
      field.setFieldContentlet("text1");
      field.setFieldName("Headline");
      field.setFieldType(Field.FieldType.TEXT.toString());
      field.setHint("");
      field.setRegexCheck("");
      field.setRequired(true);
      field.setSortOrder(0);
      field.setStructureInode(st.getInode());
      field.setFieldRelationType("");
      field.setVelocityVarName("NewsHeadline");
      field.setIndexed(true);
      field.setListed(true);
      field.setSearchable(true);
      field.setFixed(false);
      field.setReadOnly(false);
      FieldFactory.saveField(field);

      field = new Field ();
      field.setDefaultValue("");
      field.setFieldContentlet("text_area1");
      field.setFieldName("Short Summary");
      field.setFieldType(Field.FieldType.TEXT_AREA.toString());
      field.setHint("This is teaser copy shown on listing pages");
      field.setRegexCheck("");
      field.setRequired(true);
      field.setSortOrder(1);
      field.setStructureInode(st.getInode());
      field.setFieldRelationType("");
      field.setVelocityVarName("NewsSummary");
      field.setFixed(false);
      field.setReadOnly(false);
      FieldFactory.saveField(field);

      field = new Field ();
      field.setDefaultValue("");
      field.setFieldContentlet("date1");
      field.setFieldName("Publish Date");
      field.setFieldType(Field.FieldType.DATE_TIME.toString());
      field.setHint("<br>The date this news item will be displayed");
      field.setRegexCheck("");
      field.setRequired(true);
      field.setSortOrder(2);
      field.setStructureInode(st.getInode());
      field.setFieldRelationType("");
      field.setVelocityVarName("NewsPublishDate");
      field.setListed(true);
      field.setFixed(false);
      field.setReadOnly(false);
      FieldFactory.saveField(field);

      field = new Field ();
      field.setDefaultValue("");
      field.setFieldContentlet("date2");
      field.setFieldName("Expire Date");
      field.setFieldType(Field.FieldType.DATE_TIME.toString());
      field.setHint("<br>The date this item will expire");
      field.setRegexCheck("");
      field.setRequired(false);
      field.setSortOrder(3);
      field.setStructureInode(st.getInode());
      field.setFieldRelationType("");
      field.setVelocityVarName("NewsExpireDate");
      field.setFixed(false);
      field.setReadOnly(false);
      FieldFactory.saveField(field);


      field = new Field ();
      field.setDefaultValue("");
      field.setFieldContentlet("text_area2");
      field.setFieldName("Body");
      field.setFieldType(Field.FieldType.WYSIWYG.toString());
      field.setHint("");
      field.setRegexCheck("");
      field.setRequired(true);
      field.setSortOrder(4);
      field.setStructureInode(st.getInode());
      field.setFieldRelationType("");
      field.setIndexed(true);
      field.setVelocityVarName("NewsBody");
      field.setFixed(false);
      field.setReadOnly(false);
      FieldFactory.saveField(field);




View Full Code Here

TOP

Related Classes of com.dotmarketing.portlets.structure.model.Field

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.