001    /*
002     * $Id: PrimitiveElement.java 3169 2010-06-05 10:44:44Z kredel $
003     */
004    
005    package edu.jas.application;
006    
007    
008    import java.io.Serializable;
009    
010    import edu.jas.structure.GcdRingElem;
011    import edu.jas.poly.AlgebraicNumber;
012    import edu.jas.poly.AlgebraicNumberRing;
013    
014    
015    /**
016     * Container for primitive elements.
017     * @author Heinz Kredel
018     */
019    public class PrimitiveElement<C extends GcdRingElem<C>> implements Serializable {
020    
021    
022        /**
023         * The primitive element.
024         */
025        public final  AlgebraicNumberRing<C> primitiveElem;
026    
027    
028        /**
029         * The representation of the first algebraic element in the new ring.
030         */
031        public final AlgebraicNumber<C> A;
032    
033    
034        /**
035         * The representation of the second algebraic element in the new ring.
036         */
037        public final AlgebraicNumber<C> B;
038    
039    
040        /**
041         * The first algebraic ring.
042         */
043        public final  AlgebraicNumberRing<C> Aring;
044    
045    
046        /**
047         * The second algebraic ring.
048         */
049        public final  AlgebraicNumberRing<C> Bring;
050    
051    
052        /**
053         * Constructor not for use.
054         */
055        protected PrimitiveElement() {
056            throw new IllegalArgumentException("do not use this constructor");
057        }
058    
059    
060        /**
061         * Constructor.
062         * @param pe the primitive element
063         * @param A the first element.
064         * @param B the second element.
065         */
066        protected PrimitiveElement(AlgebraicNumberRing<C> pe, AlgebraicNumber<C> A, AlgebraicNumber<C> B) {
067            this(pe, A, B, null, null);
068        }
069    
070    
071        /**
072         * Constructor.
073         * @param pe the primitive element
074         * @param A the first element.
075         * @param B the second element.
076         */
077        protected PrimitiveElement(AlgebraicNumberRing<C> pe, AlgebraicNumber<C> A, AlgebraicNumber<C> B,
078                                   AlgebraicNumberRing<C> ar, AlgebraicNumberRing<C> br ) {
079            primitiveElem = pe;
080            this.A = A;
081            this.B = B;
082            this.Aring = ar;
083            this.Bring = br;
084        }
085    
086    
087        /**
088         * String representation of the ideal.
089         * @see java.lang.Object#toString()
090         */
091        @Override
092        public String toString() {
093            StringBuffer s = new StringBuffer("[");
094            s.append(primitiveElem.toString());
095            s.append(", " + A.toString());
096            s.append(", " + B.toString());
097            if (Aring != null) {
098                s.append(", " + Aring.toString());
099            }
100            if (Bring != null) {
101                s.append(", " + Bring.toString());
102            }
103            return s + "]";
104        }
105    
106    
107        /**
108         * Get a scripting compatible string representation.
109         * @return script compatible representation for this Element.
110         * @see edu.jas.structure.Element#toScript()
111         */
112        public String toScript() {
113            // Python case
114            StringBuffer s = new StringBuffer("(");
115            s.append(primitiveElem.toScript());
116            s.append(", " + A.toScript());
117            s.append(", " + B.toScript());
118            if (Aring != null) {
119                s.append(", " + Aring.toScript());
120            }
121            if (Bring != null) {
122                s.append(", " + Bring.toScript());
123            }
124            return s + ")";
125        }
126    
127    }