001 /* 002 * Jpkg - Java library and tools for operating system package creation. 003 * 004 * Copyright (c) 2007-2008 Three Rings Design, Inc. 005 * All rights reserved. 006 * 007 * Redistribution and use in source and binary forms, with or without 008 * modification, are permitted provided that the following conditions 009 * are met: 010 * 1. Redistributions of source code must retain the above copyright 011 * notice, this list of conditions and the following disclaimer. 012 * 2. Redistributions in binary form must reproduce the above copyright 013 * notice, this list of conditions and the following disclaimer in the 014 * documentation and/or other materials provided with the distribution. 015 * 3. Neither the name of the copyright owner nor the names of contributors 016 * may be used to endorse or promote products derived from this software 017 * without specific prior written permission. 018 * 019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 021 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 022 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 023 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 024 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 025 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 026 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 027 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 028 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 029 * POSSIBILITY OF SUCH DAMAGE. 030 */ 031 package com.threerings.jpkg.ant.dpkg.dependencies; 032 033 import java.util.ArrayList; 034 import java.util.List; 035 036 import com.threerings.antidote.field.ListField; 037 import com.threerings.jpkg.debian.PackageInfo; 038 import com.threerings.jpkg.debian.dependency.DependencyAlternatives; 039 import com.threerings.jpkg.debian.dependency.PackageDependency; 040 041 import static com.threerings.antidote.MutabilityHelper.requiresValidation; 042 043 044 /** 045 * The <dependencies> <alternatives> field. Holds <require> fields which indicate a list of 046 * package dependencies, one of which must be met. 047 * @see DependencyAlternatives 048 */ 049 public class Alternatives extends ListField<Require> 050 implements PackageInfoDependency 051 { 052 // from Field 053 public String getFieldName () 054 { 055 return "alternatives"; 056 } 057 058 @Override // from ListField 059 public String getChildFieldName () 060 { 061 return "require"; 062 } 063 064 // from PackageInfoDependency 065 public void addToPackageInfo (PackageInfo info) 066 { 067 requiresValidation(_alternatives); 068 info.addDependencyAlternative(_alternatives); 069 } 070 071 /** 072 * Ant adder field: require. 073 */ 074 public void add (Require require) 075 { 076 appendRequiresValidation(require); 077 } 078 079 @Override // from BaseComponent 080 protected void validateField () 081 { 082 if (noChildFieldsDefined()) { 083 return; 084 } 085 086 switch (validateFieldList()) { 087 case ALL_INVALID: 088 case SOME_INVALID: 089 return; 090 091 case ALL_VALID: 092 break; 093 } 094 095 final List<PackageDependency> depends = new ArrayList<PackageDependency>(); 096 for (final Require require : getValidatedFieldList()) { 097 depends.add(require.getDependency()); 098 } 099 100 _alternatives = new DependencyAlternatives(depends); 101 } 102 103 /** The DependencyAlternatives object representing the user supplied data. */ 104 private DependencyAlternatives _alternatives; 105 }