/scalate-util/src/main/scala/org/fusesource/scalate/util/ProductReflector.scala
http://github.com/scalate/scalate · Scala · 47 lines · 19 code · 5 blank · 23 comment · 3 complexity · 134013f3d5f8c619abe33251419b1a58 MD5 · raw file
- /**
- * Copyright (C) 2009-2011 the original author or authors.
- * See the notice.md file distributed with this work for additional
- * information regarding copyright ownership.
- *
- * 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 org.fusesource.scalate.util
- /**
- * @version $Revision : 1.1 $
- */
- object ProductReflector {
- /**
- * A helper method that uses reflection to find the methods taking no arguments to be able to display the fields in a case class
- */
- def toMap(obj: AnyRef) = {
- val c = obj.getClass
- val casemethods = accessorMethods(c)
- val values = casemethods.map(_.invoke(obj))
- casemethods.map(_.getName).zip(values).foldLeft(Map[String, Any]())(_ + _)
- }
- def accessorMethods(c: Class[_]) = {
- val predefined = List("copy$default$1", "copy$default$2", "curry", "curried", "$tag", "productArity", "productElements", "productIterator", "productPrefix", "hashCode", "toString", "tuple", "tupled")
- c.getMethods.toList.filter {
- n =>
- (n.getParameterTypes.size == 0) &&
- (n.getDeclaringClass != classOf[Object]) &&
- !predefined.exists(_ == n.getName) &&
- !n.getName.matches("_\\d+")
- }
- }
- }