All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gwt.uibinder.attributeparsers.StrictAttributeParser Maven / Gradle / Ivy

There is a newer version: 2.12.1
Show newest version
/*
 * Copyright 2009 Google Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.gwt.uibinder.attributeparsers;

import com.google.gwt.core.ext.UnableToCompleteException;
import com.google.gwt.core.ext.typeinfo.JType;
import com.google.gwt.uibinder.attributeparsers.FieldReferenceConverter.Delegate;
import com.google.gwt.uibinder.attributeparsers.FieldReferenceConverter.IllegalFieldReferenceException;
import com.google.gwt.uibinder.rebind.FieldReference;
import com.google.gwt.uibinder.rebind.MortalLogger;
import com.google.gwt.uibinder.rebind.XMLElement;

/**
 * Fall through attribute parser. Accepts a field reference or nothing.
 */
class StrictAttributeParser implements AttributeParser {

  /**
   * Package protected for testing.
   */
  static class FieldReferenceDelegate implements Delegate {
    private boolean sawReference = false;
    private final JType[] types;
    
    FieldReferenceDelegate(JType... types) {
      this.types = types;
    }

    public JType[] getTypes() {
      return types;
    }

    public String handleFragment(String fragment)
        throws IllegalFieldReferenceException {
      if (fragment.length() > 0) {
        throw new IllegalFieldReferenceException();
      }
      return fragment;
    }

    public String handleReference(String reference)
        throws IllegalFieldReferenceException {
      assertOnly();
      sawReference = true;
      return reference;
    }

    private void assertOnly() {
      if (sawReference) {
        throw new IllegalFieldReferenceException();
      }
    }
  }

  private final FieldReferenceConverter converter;
  protected final MortalLogger logger;
  private final JType[] types;

  StrictAttributeParser(FieldReferenceConverter converter, MortalLogger logger,
      JType... types) {
    this.converter = converter;
    this.logger = logger;
    this.types = types;
  }

  /**
   * If the value holds a single field reference "{like.this}", converts it to a
   * Java Expression.
   * 

* In any other case (e.g. more than one field reference), an * UnableToCompleteException is thrown. */ public String parse(XMLElement source, String value) throws UnableToCompleteException { if ("".equals(value.trim())) { logger.die(source, "Cannot use empty value as type %s", FieldReference.renderTypesList(types)); } try { return converter.convert(source, value, new FieldReferenceDelegate(types)); } catch (IllegalFieldReferenceException e) { logger.die(source, "Cannot parse value: \"%s\" as type %s", value, FieldReference.renderTypesList(types)); return null; // Unreachable } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy