1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen// Copyright (c) 2003-2004 Brian Wellington (bwelling@xbill.org)
2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage org.xbill.DNS;
4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.io.*;
6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.*;
7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * A helper class for constructing dynamic DNS (DDNS) update messages.
10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @author Brian Wellington
12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class Update extends Message {
15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate Name origin;
17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate int dclass;
18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates an update message.
21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param zone The name of the zone being updated.
22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param dclass The class of the zone being updated.
23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic
25d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenUpdate(Name zone, int dclass) {
26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	super();
27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	if (!zone.isAbsolute())
28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		throw new RelativeNameException(zone);
29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	DClass.check(dclass);
30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        getHeader().setOpcode(Opcode.UPDATE);
31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	Record soa = Record.newRecord(zone, Type.SOA, DClass.IN);
32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	addRecord(soa, Section.QUESTION);
33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	this.origin = zone;
34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	this.dclass = dclass;
35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Creates an update message.  The class is assumed to be IN.
39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @param zone The name of the zone being updated.
40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic
42d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChenUpdate(Name zone) {
43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	this(zone, DClass.IN);
44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate void
47d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChennewPrereq(Record rec) {
48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	addRecord(rec, Section.PREREQ);
49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenprivate void
52d7955ce24d294fb2014c59d11fca184471056f44Shuyi ChennewUpdate(Record rec) {
53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	addRecord(rec, Section.UPDATE);
54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Inserts a prerequisite that the specified name exists; that is, there
58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * exist records with the given name in the zone.
59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpresent(Name name) {
62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newPrereq(Record.newRecord(name, Type.ANY, DClass.ANY, 0));
63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Inserts a prerequisite that the specified rrset exists; that is, there
67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * exist records with the given name and type in the zone.
68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpresent(Name name, int type) {
71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newPrereq(Record.newRecord(name, type, DClass.ANY, 0));
72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the string, and inserts a prerequisite that the
76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * record exists.  Due to the way value-dependent prequisites work, the
77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * condition that must be met is that the set of all records with the same
78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * and type in the update message must be identical to the set of all records
79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * with that name and type on the server.
80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed.
81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpresent(Name name, int type, String record) throws IOException {
84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newPrereq(Record.fromString(name, type, dclass, 0, record, origin));
85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the tokenizer, and inserts a prerequisite that the
89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * record exists.  Due to the way value-dependent prequisites work, the
90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * condition that must be met is that the set of all records with the same
91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * and type in the update message must be identical to the set of all records
92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * with that name and type on the server.
93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed.
94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpresent(Name name, int type, Tokenizer tokenizer) throws IOException {
97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newPrereq(Record.fromString(name, type, dclass, 0, tokenizer, origin));
98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Inserts a prerequisite that the specified record exists.  Due to the way
102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * value-dependent prequisites work, the condition that must be met is that
103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the set of all records with the same and type in the update message must
104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * be identical to the set of all records with that name and type on the server.
105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpresent(Record record) {
108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newPrereq(record);
109d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
110d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
111d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
112d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Inserts a prerequisite that the specified name does not exist; that is,
113d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * there are no records with the given name in the zone.
114d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
115d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
116d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenabsent(Name name) {
117d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newPrereq(Record.newRecord(name, Type.ANY, DClass.NONE, 0));
118d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
119d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
120d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
121d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Inserts a prerequisite that the specified rrset does not exist; that is,
122d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * there are no records with the given name and type in the zone.
123d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
124d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
125d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenabsent(Name name, int type) {
126d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newPrereq(Record.newRecord(name, type, DClass.NONE, 0));
127d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
128d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
129d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
130d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the string, and indicates that the record
131d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * should be inserted into the zone.
132d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed.
133d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
134d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
135d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenadd(Name name, int type, long ttl, String record) throws IOException {
136d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newUpdate(Record.fromString(name, type, dclass, ttl, record, origin));
137d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
138d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
139d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
140d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the tokenizer, and indicates that the record
141d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * should be inserted into the zone.
142d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed.
143d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
144d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
145d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenadd(Name name, int type, long ttl, Tokenizer tokenizer) throws IOException {
146d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newUpdate(Record.fromString(name, type, dclass, ttl, tokenizer,
147d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen				    origin));
148d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
149d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
150d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
151d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that the record should be inserted into the zone.
152d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
153d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
154d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenadd(Record record) {
155d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newUpdate(record);
156d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
157d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
158d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
159d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that the records should be inserted into the zone.
160d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
161d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
162d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenadd(Record [] records) {
163d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	for (int i = 0; i < records.length; i++)
164d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		add(records[i]);
165d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
166d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
167d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
168d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that all of the records in the rrset should be inserted into the
169d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * zone.
170d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
171d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
172d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenadd(RRset rrset) {
173d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	for (Iterator it = rrset.rrs(); it.hasNext(); )
174d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		add((Record) it.next());
175d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
176d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
177d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
178d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that all records with the given name should be deleted from
179d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * the zone.
180d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
181d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
182d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(Name name) {
183d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newUpdate(Record.newRecord(name, Type.ANY, DClass.ANY, 0));
184d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
185d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
186d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
187d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that all records with the given name and type should be deleted
188d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * from the zone.
189d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
190d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
191d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(Name name, int type) {
192d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newUpdate(Record.newRecord(name, type, DClass.ANY, 0));
193d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
194d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
195d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
196d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the string, and indicates that the record
197d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * should be deleted from the zone.
198d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed.
199d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
200d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
201d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(Name name, int type, String record) throws IOException {
202d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newUpdate(Record.fromString(name, type, DClass.NONE, 0, record,
203d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen				    origin));
204d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
205d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
206d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
207d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the tokenizer, and indicates that the record
208d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * should be deleted from the zone.
209d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed.
210d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
211d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
212d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(Name name, int type, Tokenizer tokenizer) throws IOException {
213d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newUpdate(Record.fromString(name, type, DClass.NONE, 0, tokenizer,
214d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen				    origin));
215d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
216d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
217d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
218d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that the specified record should be deleted from the zone.
219d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
220d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
221d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(Record record) {
222d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	newUpdate(record.withDClass(DClass.NONE, 0));
223d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
224d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
225d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
226d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that the records should be deleted from the zone.
227d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
228d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
229d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(Record [] records) {
230d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	for (int i = 0; i < records.length; i++)
231d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		delete(records[i]);
232d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
233d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
234d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
235d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that all of the records in the rrset should be deleted from the
236d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * zone.
237d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
238d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
239d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chendelete(RRset rrset) {
240d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	for (Iterator it = rrset.rrs(); it.hasNext(); )
241d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		delete((Record) it.next());
242d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
243d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
244d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
245d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the string, and indicates that the record
246d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * should be inserted into the zone replacing any other records with the
247d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * same name and type.
248d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed.
249d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
250d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
251d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenreplace(Name name, int type, long ttl, String record) throws IOException {
252d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	delete(name, type);
253d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	add(name, type, ttl, record);
254d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
255d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
256d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
257d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Parses a record from the tokenizer, and indicates that the record
258d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * should be inserted into the zone replacing any other records with the
259d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * same name and type.
260d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * @throws IOException The record could not be parsed.
261d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
262d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
263d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenreplace(Name name, int type, long ttl, Tokenizer tokenizer) throws IOException
264d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen{
265d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	delete(name, type);
266d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	add(name, type, ttl, tokenizer);
267d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
268d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
269d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
270d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that the record should be inserted into the zone replacing any
271d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * other records with the same name and type.
272d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
273d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
274d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenreplace(Record record) {
275d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	delete(record.getName(), record.getType());
276d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	add(record);
277d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
278d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
279d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
280d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that the records should be inserted into the zone replacing any
281d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * other records with the same name and type as each one.
282d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
283d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
284d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenreplace(Record [] records) {
285d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	for (int i = 0; i < records.length; i++)
286d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		replace(records[i]);
287d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
288d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
289d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/**
290d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Indicates that all of the records in the rrset should be inserted into the
291d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * zone replacing any other records with the same name and type.
292d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
293d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic void
294d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenreplace(RRset rrset) {
295d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	delete(rrset.getName(), rrset.getType());
296d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen	for (Iterator it = rrset.rrs(); it.hasNext(); )
297d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen		add((Record) it.next());
298d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
299d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
300d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
301