@Override
	public Group parse() {
		if(!this.prepared) {
			this.prepared = true;
			
			StringBuilder sB = new StringBuilder();
			sB.append("(");
			Iterator<Object> elemIterator = this.elems.iterator();
			while(elemIterator.hasNext()) {
				Object eRaw = elemIterator.next();
				
				if(eRaw instanceof Elem) {
					Elem e = (Elem)eRaw;
					sB.append(e.getType().getTextual());

					String v = e.getValue() == null ? "" : e.getValue();
					ValueType vT = e.getValueType();
					String vTS = vT.getTextual().replace("%1", e.getField().replace("#__", this.db.getPrefix()));
					vTS = vTS.replace("%2", v);
					sB.append(vTS);
					
					/*sB.append(e.getField().replace("#__", this.db.getPrefix()));
					sB.append(" = ");
					sB.append(e.getValue());*/
				}else if(eRaw instanceof Group) {
					Group e = (Group)eRaw;
					sB.append(e.getType().getTextual());
					if(!e.isParsed()) {
						e.parse();
					}
					
					sB.append(e.getParsedGroup());
				}
			}
			
			sB.append(")");
			
			this.group = sB.toString();
		}
		
		return this;
	}