1
package
hudsonfog.voc.classifieds;
2
3
import
com.fogx.webdav.DavResource;
4
import
com.fogx.webdav.DavClass;
5
import
com.fogx.webdav.DavBean;
6
import
com.fogx.webdav.DavProperty;
7
import
static
com.fogx.webdav.DavProperty.*;
8
import
com.fogx.webdav.packages.DavBeanPackage;
9
import
com.fogx.webdav.util.DavResourceSupport;
10
import
com.fogx.webdav.util.UrlUtil;
11
import
java.util.Date;
12
import
java.util.Map;
13
import
java.util.HashMap;
14
import
java.util.List;
15
import
java.util.Collections;
16
import
java.util.Arrays;
17
18
import
hudsonfog.voc.system.readHistory
.*;
19
import
hudsonfog.voc.model.company
.*;
20
import
hudsonfog.voc.model.humanResources
.*;
21
import
hudsonfog.voc.system.behavior
.*;
22
import
hudsonfog.voc.model.recurrence
.*;
23
import
hudsonfog.voc.model.portal
.*;
24
import
hudsonfog.voc.system.parse
.*;
25
import
hudsonfog.voc.system.identity
.*;
26
import
hudsonfog.voc.aspects.ui
.*;
27
import
hudsonfog.voc.classifieds.jobs
.*;
28
import
hudsonfog.voc.system.primitiveTypes
.*;
29
import
hudsonfog.voc.model.top
.*;
30
import
hudsonfog.voc.system.XMLSchema
.*;
31
32
import
hudsonfog.voc.system.fog
.*;
33
34
35
public
abstract
class
jobs {
36
37
/**
38
* Job offered by a specific organization.
39
*/
40
@DavClass._largeIcon(
"icons/classes/jobs-Job-large.gif"
)
41
@DavClass._viewCols(
"title, skillCategory, salary, featuredJob, region, city, company, dateSubmitted, myUnreadMessages, myFlaggedMessages, alreadyViewedByMe"
)
42
@DavClass._notSiteSharable
43
@DavClass._editCols(
"title, skillCategory, salary, featuredJob, region, city, positionType"
)
44
@DavClass._icon(
"icons/classes/jobs-Job.gif"
)
45
@DavClass._skipAccessControl
46
public
static
class
Job
implements
CollaborationPoint, FileSystem, Address1, Trackable {
47
@_autoincrement
48
@_readOnly
49
@_notSearchable
50
@k
public
Integer jobId;
51
public
Industry industry;
//* industry of the employer
52
public
JobCategory jobCategory;
//* area of work or type of employment
53
@
r
public
SkillCategory skillCategory;
//* skill category, like 'web developer'
54
@_resourceLink
55
@_displayNameElm
56
@_cloneOf(
"subject"
)
57
@c
public
String title;
58
@_sortAscending(
false
)
59
@c
public
ComplexDate dateSubmitted;
//* when this message entered the system
60
@_allowRoles(
"self, admin"
)
61
@c
public
Contact submittedBy;
62
@_onCreate
63
public
Boolean partTime = writeJS(
"'false'"
);
//* yes - part time, no - full time
64
public
PositionType positionType;
65
public
CompanyType companyType;
66
@_onCreate
67
public
SalaryType salaryType = writeJS(
"'annual salary'"
);
68
@_icon(
"icons/classes/Money.gif"
)
69
public
Money salary;
70
public
Boolean requiresSecurityClearing;
71
@_icon(
"icons/featured.gif"
)
72
@_readOnly
73
@_colorCoding(
"'True' icons/featured.gif; 'False' icons/blank.gif"
)
74
public
Boolean featuredJob;
//* special paid-for upgraded Job advertisement
75
@_displayInline
76
@_cloneOf(
"description"
)
77
@c
public
longString jobDescription;
78
@_backLink(
"job"
)
79
@_displayInline
80
public
Qualification[] qualifications;
81
@_maxSize(
60000
)
82
@_avoidDisplaying
83
public
longString all_qualifications;
// accumulates all backlinked qualifications for searching purposes
84
@_maxSize(
5000
)
85
@_displayInline
86
public
String responsibilities;
87
@_icon(
"icons/company.gif"
)
88
@_allowPermissions(
"MKRESOURCE, PROPPATCH, PUT"
)
89
@_avoidDisplaying(
false
)
90
public
Employer company;
// :: e.senderOrganization; //* if omitted for confidentiality reasons - see company description
91
@_maxSize(
2000
)
92
@_notSearchable
93
@_displayInline
94
@_onCreate
95
public
String companyInfo = writeJS(
"companyInfo ? companyInfo : company ? company.description : null"
);
96
public
String reportingTo;
//* a manager who will supervise the employee
97
public
String department;
//* department or group within employer's organization
98
@_icon(
"icons/Status.gif"
)
99
@_colorCoding(
"'Open' icons/status_open.gif; 'Expired' icons/status_forbid.gif; 'Cancelled' icons/status_cancelled.gif"
)
100
@_onCreate
101
public
JobStatus jobStatus = writeJS(
"jobStatus ? jobStatus : 'Open'"
);
//* status of this Job
102
@_onCreate
103
public
Long startingFrom = writeJS(
"dateSubmitted"
);
//* when Job must be filled; if not specified - starting immediately
104
@_onCreate
105
public
Long expirationDate = writeJS(
"new Date().getTime() + 30 * 24 * 3600"
);
//* date when this Job opening will expire
106
@_notSearchable
107
public
String jobCode;
//* employer's job identifier
108
@_backLink(
"job"
)
109
public
JobApplication[] applications;
110
@_cloneOf(
"country1"
)
111
@c
public
Country country;
112
@_label(
"State"
)
113
@_cloneOf(
"region1"
)
114
@c
public
String region;
115
@_cloneOf(
"city1"
)
116
@c
public
String city;
//* city, town, village, township
117
@_cloneOf(
"postalCode1"
)
118
@c
public
String postalCode;
119
@c
public
km radius;
//* ex. within 10 miles from certain zip code
120
@c
public
km distance;
//* distance of this location from the specified zip code
121
@_cloneOf(
"address11"
)
122
@c
public
String address1;
//* street address, building number, PO Box, etc.
123
@_backLink(
"forResource"
)
124
@c
public
SharedFile[] attachments;
125
@_cloneOf(
"attachmentsUrl"
)
126
@c
public
String url;
127
@_avoidDisplaying
128
@_backLink(
"forum"
)
129
@_cloneOf(
"members"
)
130
@c
public
Subscription[] subscription;
131
@_notSearchable
132
@_backLink(
"forum"
)
133
public
Subscribed[] subscribers;
134
@_backLink(
"invitedTo"
)
135
@_cloneOf(
"invited"
)
136
@c
public
Invitation[] invitedSubscribers;
137
@_backLink(
"forum"
)
138
@_cloneOf(
"pending"
)
139
@c
public
PendingSubscription[] pendingSubscribers;
//* permission to subscribe requests
140
@_backLink(
"forum"
)
141
@_displayInline
142
@c
public
Comment[] comments;
143
@c
public
Comment lastComment;
144
@_backLink(
"forResource"
)
145
@_displayInline
146
@c
public
ChatHistoryFile[] chatHistory;
147
@_dateFormat(
"~MMM-dd, yyyy HH:mm"
)
148
@_icon(
"icons/classes/Comment.gif"
)
149
@_readOnly
150
public
ComplexDate lastCommentTime = formula(
"lastComment.submitTime"
);
151
@_backLink(
"associatedWith"
)
152
@c
public
Message[] myUnreadMessages;
153
@_backLink(
"associatedWith"
)
154
@c
public
Message[] myFlaggedMessages;
155
@_backLink(
"forResource"
)
156
@_cloneOf(
"readHistory"
)
157
@c
public
TrackedRead[] views;
//* history of viewing for this Job
158
@_backLink(
"forResource"
)
159
@_cloneOf(
"myLastRead"
)
160
@c
public
TrackedRead[] myView;
//* did I view this Job already?
161
@c
public
Integer alreadyViewedByMe;
//* marked if I opened to view this resource at least once
162
}
163
164
public
static
enum JobCategory {
165
@_label(
"Admin. and Business Support Services"
) Admin_AndBusinessSupportServices, @_label(
"Advertising and Public Relations"
) AdvertisingAndPublicRelations, @_label(
"Arts and Recreation Services"
) ArtsAndRecreationServices, @_label(
"Associations and Organizations"
) AssociationsAndOrganizations, Education, @_label(
"Financial Services and Insurance"
) FinancialServicesAndInsurance, @_label(
"Health Care"
) HealthCare, @_label(
"Hospitality and Food Service"
) HospitalityAndFoodService, @_label(
"Information and Communications"
) InformationAndCommunications, Manufacturing, @_label(
"Personal and Household Services"
) PersonalAndHouseholdServices, @_label(
"Professional; Scientific and Tech. Svcs"
) Professional_ScientificAndTech_Svcs, @_label(
"Real Estate and Leasing"
) RealEstateAndLeasing, @_label(
"Retail Stores"
) RetailStores, @_label(
"Retail; Non-Store"
) Retail_Non_Store, @_label(
"Social Services"
) SocialServices, @_label(
"Other Employers and Industries"
) OtherEmployersAndIndustries;
166
}
167
168
public
static
enum PositionType {
169
employee, contract, @_label(
"contract-to-hire"
) contract_to_hire, temp, @_label(
"temp-to-employee"
) temp_to_employee, internship, summer;
170
}
171
172
public
static
enum SalaryType {
173
@_label(
"annual salary"
) annualSalary, @_label(
"hourly wage"
) hourlyWage;
174
}
175
176
public
static
enum CompanyType {
177
@_label(
"Direct Employer"
) DirectEmployer, @_label(
"Staffing Firm"
) StaffingFirm;
178
}
179
180
/**
181
* SkillCategory definition and applicable Skills
182
*/
183
@DavClass._copyByReference
184
@DavClass._largeIcon(
"icons/classes/JobPosition-large.gif"
)
185
@DavClass._skipAccessControl
186
@DavClass._cachable
187
public
static
class
SkillCategory
implements
Folder, Styled {
188
@_sortAscending
189
@k
public
String name;
//* position title
190
@_backLink(
"skillCategory"
)
191
@_displayInline
192
@_cloneOf(
"folderItems"
)
193
@c
public
SkillType[] skills;
//* skills applicable for this position
194
@c
public
styleSheet styleSheet;
195
@_maxSize(
2000
)
196
@_icon(
"icons/description.gif"
)
197
@_displayInline
198
public
String description;
199
}
200
201
/**
202
* Skill applicable to a certain position
203
*/
204
@DavClass._copyByReference
205
@DavClass._viewCols(
"skillCategory, name"
)
206
@DavClass._cachable
207
@DavClass._nmbResourcesInRow(
2
)
208
@DavClass._styleSheet(
"background: #D7D8FB;border-bottom: 1px solid #104A7B;border-right: 1px solid #104A7B;border-left: 1px solid #AFC4D5;border-top:1px solid #AFC4D5;color:#000066;height:40pt;text-decoration:none; cursor: pointer"
)
209
public
static
class
SkillType
implements
FolderItem, Styled {
210
@_displayNameElm
211
@_containerMember
212
@_cloneOf(
"folder"
)
213
@k@c
public
SkillCategory skillCategory;
214
@_resourceLink
215
@_displayNameElm
216
@_skipLabelInGrid
217
@k
public
String name;
218
@c
public
styleSheet styleSheet = writeJS(
"skillCategory.styleSheet"
);
219
@_maxSize(
2000
)
220
@_icon(
"icons/description.gif"
)
221
@_displayInline
222
public
String description;
223
@_avoidDisplaying
224
@_backLink(
"skillType"
)
225
public
hudsonfog.voc.classifieds.jobs.Skill
[] jobSkills;
226
@_avoidDisplaying
227
@_backLink(
"skillType"
)
228
public
hudsonfog.voc.model.humanResources.Skill
[] hrSkills;
229
}
230
231
/**
232
* Qualification required for a certain Job
233
*/
234
@DavClass._copyByReference
235
@DavClass._largeIcon(
"icons/classes/Qualification-large.gif"
)
236
@DavClass._icon(
"icons/classes/Qualification.gif"
)
237
@DavClass._skipAccessControl
238
@DavClass._nmbResourcesInRow(
2
)
239
public
static
class
Qualification {
240
@k
public
Job job;
241
@_displayNameElm
242
@_sortAscending
243
@_displaySize(
120
)
244
@k
public
String skillName;
245
}
246
247
@DavClass._validUser
248
@DavClass._largeIcon(
"icons/classes/Skill-large.gif"
)
249
@DavClass._nmbResourcesInRow(
2
)
250
@DavClass._icon(
"icons/classes/Skill.gif"
)
251
public
static
class
Skill
implements
LineItem, Cancellable {
252
@_containerMember
253
@k
public
Resume resume;
254
@_displayNameElm
255
@_containerMember
256
@_cloneOf(
"item"
)
257
@k@c
public
SkillType skillType;
258
@_sortAscending(
false
)
259
public
Float yearsExperience;
//* specify years of experience in this skill (use decimal point if less then 2 years)
260
public
SkillRating rating;
//* rate how strong is the knowledge of this skill
261
@c
public
Boolean cancelled;
262
}
263
264
public
static
enum SkillRating {
265
ultimate, high, strong, medium, low, minimal;
266
}
267
268
@DavClass._validUser
269
@DavClass._largeIcon(
"icons/classes/Education-large.gif"
)
270
@DavClass._icon(
"icons/classes/Education.gif"
)
271
public
static
class
Education {
272
@k
public
Resume resume;
273
@_avoidDisplaying
274
@k
public
Integer seq;
275
@_displayNameElm
276
public
String institution;
277
@_displayNameElm
278
public
String degree;
279
public
String major;
280
public
Float GPA;
281
@_sortAscending(
false
)
282
public
String datesAttended;
283
@_maxSize(
4000
)
284
public
String description;
285
}
286
287
/**
288
* Job application. Can be submitted online or by email
289
*/
290
@DavClass._viewCols(
"resume, coverLetter, notes, job, dateSubmitted, status, interviews, myUnreadMessages, myFlaggedMessages"
)
291
@DavClass._largeIcon(
"icons/classes/JobApplication-large.gif"
)
292
@DavClass._icon(
"icons/classes/JobApplication.gif"
)
293
public
static
class
JobApplication
implements
CollaborationPoint, FileSystem {
294
@_displayNameElm
295
@k
public
Job job;
296
@k@c
public
ComplexDate dateSubmitted;
//* when this message entered the system
297
@_allowRoles(
"self, admin"
)
298
@_cloneOf(
"submittedBy"
)
299
@c
public
Contact applicant;
//* will not be shown to employer
300
@_lookupFrom(
"applicant.resumes"
)
301
@k
public
Resume resume;
//* applicant's resume
302
@_lookupFrom(
"applicant.coverLetters"
)
303
public
CoverLetter coverLetter;
304
@_cloneOf(
"description"
)
305
@c
public
String notes;
306
public
Boolean haveReliableTransportation;
//* applicant has reliable transportation to this Job's location
307
@_icon(
"icons/Status.gif"
)
308
@_onCreate
309
@_colorCoding(
"'Submitted' icons/status_submitted.gif; 'Received' icons/status_open.gif; 'Denied' icons/status_broken.gif; 'Scheduled Interview' icons/status_inprogress.gif; 'Offered Job' icons/status_fixed.gif"
)
310
public
ApplicationStatus status = writeJS(
"status ? status : 'Submitted'"
);
311
@_backLink(
"forResource"
)
312
@c
public
SharedFile[] attachments;
//* resume and other documents (awards, prior work samples, etc.) that may help qualifying the candidate
313
@_cloneOf(
"attachmentsUrl"
)
314
@c
public
String url;
315
@_backLink(
"application"
)
316
@_allowRoles(
"self, admin"
)
317
public
Interview[] interviews;
//* scheduled and prior interviews
318
@_avoidDisplaying
319
@_backLink(
"forum"
)
320
@_cloneOf(
"members"
)
321
@c
public
Subscription[] subscription;
322
@_notSearchable
323
@_backLink(
"forum"
)
324
public
Subscribed[] subscribers;
325
@_backLink(
"invitedTo"
)
326
@_cloneOf(
"invited"
)
327
@c
public
Invitation[] invitedSubscribers;
328
@_backLink(
"forum"
)
329
@_cloneOf(
"pending"
)
330
@c
public
PendingSubscription[] pendingSubscribers;
//* permission to subscribe requests
331
@_backLink(
"forum"
)
332
@_displayInline
333
@c
public
Comment[] comments;
334
@c
public
Comment lastComment;
335
@_backLink(
"forResource"
)
336
@_displayInline
337
@c
public
ChatHistoryFile[] chatHistory;
338
@_dateFormat(
"~MMM-dd, yyyy HH:mm"
)
339
@_readOnly
340
@_icon(
"icons/classes/Comment.gif"
)
341
public
ComplexDate lastCommentTime = formula(
"lastComment.submitTime"
);
342
@_backLink(
"associatedWith"
)
343
@c
public
Message[] myUnreadMessages;
344
@_backLink(
"associatedWith"
)
345
@c
public
Message[] myFlaggedMessages;
346
}
347
348
/**
349
* Resume. Can be submitted online or by email.
350
*/
351
@DavClass._nmbGroupColsInEditMode(
2
)
352
@DavClass._validUser
353
@DavClass._largeIcon(
"icons/classes/Resume-large.gif"
)
354
@DavClass._viewCols(
"title, dateSubmitted, firstName, lastName, region, city, desiredSalary, views, myUnreadMessages, myFlaggedMessages, alreadyViewedByMe"
)
355
@DavClass._editCols(
"title, firstName, lastName, desiredSalary, region, city, positionType, companyType"
)
356
@DavClass._icon(
"icons/classes/Resume.gif"
)
357
public
static
class
Resume
implements
CollaborationPoint, FileSystem, PersonIdentifier, Address1, Trackable {
358
@_label(
"Standard information"
)
359
@_propertyGroupList(
"resumeId, title"
)
360
@_abstract
361
@_propertyGroup(
"true"
)
362
public
Boolean group0;
363
@_autoincrement
364
@_readOnly
365
@_notSearchable
366
@k
public
Integer resumeId;
// todo - do we need it?
367
@_displayNameElm
368
@_displaySize(
35
)
369
@_cloneOf(
"subject"
)
370
@c
public
String title;
//* title of this resume
371
@_label(
"Contact information"
)
372
@_propertyGroupList(
"suffix, firstName, middleName, lastName, personalTitle, sex, address1, city, region, postalCode, country, radius, distance"
)
373
@_abstract
374
@_propertyGroup(
"true"
)
375
public
Boolean group1;
376
@c
public
String firstName = writeJS(
"confidential(firstName, 'firstName')"
);
377
@c
public
String lastName = writeJS(
"confidential(lastName, 'lastName')"
);
378
@_notSearchable
379
@c
public
String middleName = writeJS(
"confidential(middleName, 'middleName')"
);
380
@_notSearchable
381
@c
public
Title personalTitle = writeJS(
"confidential(personalTitle, 'personalTitle')"
);
382
@_notSearchable
383
@c
public
String suffix = writeJS(
"confidential(suffix, 'suffix')"
);
384
@_notSearchable
385
@c
public
Sex sex = writeJS(
"confidential(sex, 'sex')"
);
386
@_cloneOf(
"country1"
)
387
@c
public
Country country = writeJS(
"confidential(country, 'country')"
);
388
@_label(
"State"
)
389
@_cloneOf(
"region1"
)
390
@c
public
String region = writeJS(
"confidential(region, 'region')"
);
391
@_cloneOf(
"city1"
)
392
@c
public
String city = writeJS(
"confidential(city, 'city')"
);
//* city, town, village, township
393
@_cloneOf(
"postalCode1"
)
394
@c
public
String postalCode = writeJS(
"confidential(postalCode, 'postalCode')"
);
395
@c
public
km radius;
//* ex. within 10 miles from certain zip code
396
@c
public
km distance;
//* distance of this location from the specified zip code
397
@_cloneOf(
"address11"
)
398
@c
public
String address1 = writeJS(
"confidential(address1, 'address1')"
);
//* street address, building number, PO Box, etc.
399
@_label(
"Experience"
)
400
@_propertyGroupList(
"priorEmployment"
)
401
@_abstract
402
@_propertyGroup(
"true"
)
403
public
Boolean group2;
404
@_backLink(
"resume"
)
405
@_displayInline
406
public
Employment[] priorEmployment;
//* work performed in the past (may inclide different jobs at the same place)
407
@_label(
"Education"
)
408
@_propertyGroupList(
"education"
)
409
@_abstract
410
@_propertyGroup(
"true"
)
411
public
Boolean group3;
412
@_backLink(
"resume"
)
413
@_displayInline
414
public
Education[] education;
415
@_label(
"Skills"
)
416
@_propertyGroupList(
"skills, all_skills, formattedResume, attachments"
)
417
@_abstract
418
@_propertyGroup(
"true"
)
419
public
Boolean group4;
420
@_maxDisplayInplace(
5
)
421
@_backLink(
"resume"
)
422
@_displayInline
423
public
Skill[] skills;
//* detailed skill level
424
@_maxSize(
60000
)
425
@_avoidDisplaying
426
public
longString all_skills;
// accumulated tokens from skills - for searching purposes
427
@_notSearchable
428
public
SharedFile formattedResume;
//* resume file in .html, .doc, .pdf or other format
429
@_backLink(
"forResource"
)
430
@c
public
SharedFile[] attachments;
//* other documents (awards, prior work samples, etc.) that may help qualifying the candidate
431
@_label(
"Summary"
)
432
@_propertyGroupList(
"hoursOrShifts, salaryType, desiredSalary, description, authorizedToWorkInUS, haveSecurityClearing, positionType, companyType, status, partTime, willingToRelocate, confidentialityLevel"
)
433
@_abstract
434
@_propertyGroup(
"true"
)
435
public
Boolean group5;
436
@_icon(
"icons/dayNight.gif"
)
437
public
HoursOrShifts hoursOrShifts;
438
@_onCreate
439
public
SalaryType salaryType = writeJS(
"'annual salary'"
);
440
@_icon(
"icons/classes/Money.gif"
)
441
public
Money desiredSalary;
442
@_notSearchable
443
@c
public
String description;
//* copy and paste your resume here
444
public
Boolean authorizedToWorkInUS;
445
public
Boolean haveSecurityClearing;
//* yes, if you have a security clearing
446
public
PositionType positionType;
447
public
CompanyType companyType;
448
public
ApplicantStatus status;
449
public
Boolean partTime;
//* seeking part time employment
450
public
Boolean willingToRelocate;
//* will consider moving to another place
451
@_icon(
"icons/lock.gif"
)
452
@_allowRoles(
"self, admin"
)
453
@_onCreate
454
public
ConfidentialityLevel confidentialityLevel = writeJS(
"'No restrictions'"
);
//* specifies how much information on this resume is shown to employers
455
@_label(
"Personal information"
)
456
@_propertyGroupList(
"person, myUnreadMessages, myFlaggedMessages, views, myView, alreadyViewedByMe, dateSubmitted, url"
)
457
@_abstract
458
@_propertyGroup(
"true"
)
459
public
Boolean group6;
460
@_containerMember
461
@_notSearchable
462
@_allowRoles(
"self, admin"
)
463
@_cloneOf(
"submittedBy"
)
464
@c
public
Contact person;
465
@_backLink(
"associatedWith"
)
466
@c
public
Message[] myUnreadMessages;
467
@_backLink(
"associatedWith"
)
468
@c
public
Message[] myFlaggedMessages;
469
@_backLink(
"forResource"
)
470
@_cloneOf(
"readHistory"
)
471
@c
public
TrackedRead[] views;
//* tracking who viewed this resume
472
@_backLink(
"forResource"
)
473
@_cloneOf(
"myLastRead"
)
474
@c
public
TrackedRead[] myView;
//* did I see this Resume already?
475
@c
public
Integer alreadyViewedByMe;
//* marked if I opened to view this resource at least once
476
@_sortAscending(
false
)
477
@c
public
ComplexDate dateSubmitted;
//* when this message entered the system
478
@_cloneOf(
"attachmentsUrl"
)
479
@c
public
String url;
480
}
481
482
public
static
enum HoursOrShifts {
483
@_label(
"1st"
) _1st, @_label(
"2nd"
) _2nd, @_label(
"3rd"
) _3rd, Rotating, Weekends, Holidays, Overtime, @_label(
"After School"
) AfterSchool;
484
}
485
486
@DavClass._validUser
487
@DavClass._largeIcon(
"icons/classes/CoverLetter-large.gif"
)
488
@DavClass._icon(
"icons/classes/CoverLetter.gif"
)
489
public
static
class
CoverLetter {
490
@_containerMember
491
@k
public
Contact person;
492
@_displayNameElm
493
@k
public
String title;
494
@_maxSize(
60000
)
495
@_displayInline
496
public
longString description;
497
}
498
499
public
static
enum ConfidentialityLevel {
500
@_label(
"No restrictions"
) NoRestrictions, @_label(
"Withhold my contact information"
) WithholdMyContactInformation, @_label(
"Reveal only when I apply for a Job"
) RevealOnlyWhenIApplyForAJob;
501
}
502
503
public
static
enum JobStatus {
504
Open, Expired, Cancelled;
505
}
506
507
public
static
enum ApplicantStatus {
508
@_label(
"Actively looking for a Job"
) ActivelyLookingForAJob, @_label(
"Will take the right opportunity"
) WillTakeTheRightOpportunity;
509
}
510
511
@DavClass._validUser
512
@DavClass._largeIcon(
"icons/classes/Employment-large.gif"
)
513
@DavClass._icon(
"icons/classes/Employment.gif"
)
514
public
static
class
Employment {
515
@k
public
Resume resume;
516
@_avoidDisplaying
517
@k
public
Integer seq;
518
public
String employer;
519
@_displayNameElm
520
public
String jobTitle;
//* title at this position
521
public
String location;
//* country, state/province
522
@_displayNameElm
523
@_sortAscending(
false
)
524
public
String datesEmployed;
//* e.g. 2000-2005
525
@_maxSize(
4000
)
526
public
String description;
//* details on work performed, skills applied and achievements
527
}
528
529
/**
530
* Scheduled Interview for a Job applicant.
531
* Applicant will be informed and will be asked to confirm the interview date and time.
532
*/
533
@DavClass._largeIcon(
"icons/classes/Meeting-large.gif"
)
534
@DavClass._icon(
"icons/classes/Meeting.gif"
)
535
public
static
class
Interview
extends
hudsonfog.voc.model.portal.Meeting
{
536
@_subPropertyOf(
"forum"
)
537
@k@s
public
JobApplication application;
538
@k@s
public
Integer seq;
539
}
540
541
/**
542
* Job Fair is organized by a recruiting agency to invite candidates for its open Jobs
543
*/
544
@DavClass._largeIcon(
"icons/classes/JobFair-large.gif"
)
545
@DavClass._icon(
"icons/classes/JobFair.gif"
)
546
@DavClass._skipAccessControl
547
public
static
class
JobFair
extends
hudsonfog.voc.model.top.Demand
implements
ScheduledItem {
548
@k
public
Employer organizer = writeJS(
"organizer ? organizer : submittedBy.organization"
);
549
@k@s
public
ComplexDate dateSubmitted;
550
@_subPropertyOf(
"synopsis"
)
551
@s
public
String title;
552
@_subPropertyOf(
"submittedBy"
)
553
@s
public
Contact contactPerson;
554
@_dateFormat(
"~MMM-dd, yyyy HH:mm"
)
555
@_sortAscending(
false
)
556
@c
public
ComplexDate start;
//* start date
557
@_dateFormat(
"~MMM-dd, yyyy HH:mm"
)
558
@_cloneOf(
"end"
)
559
@c
public
ComplexDate finish;
//* finish
560
@_backLink(
"jobFair"
)
561
public
ParticipatingEmployer[] employers;
562
}
563
564
@DavClass._skipAccessControl
565
public
static
class
ParticipatingEmployer {
566
@k
public
JobFair jobFair;
567
@k
public
Employer employer;
568
}
569
570
/**
571
* Open house is organized by an employer to invite candidates for its open Jobs
572
*/
573
@DavClass._largeIcon(
"icons/classes/jobs-OpenHouse-large.gif"
)
574
@DavClass._skipAccessControl
575
@DavClass._icon(
"icons/classes/jobs-OpenHouse.gif"
)
576
public
static
class
OpenHouse
extends
hudsonfog.voc.model.top.Demand
implements
ScheduledItem {
577
@k
public
Employer employer = writeJS(
"employer ? employer : submittedBy.organization"
);
578
@k@s
public
ComplexDate dateSubmitted;
579
@_subPropertyOf(
"synopsis"
)
580
@s
public
String title;
581
@_subPropertyOf(
"submittedBy"
)
582
@s
public
Contact contactPerson;
583
@_dateFormat(
"~MMM-dd, yyyy HH:mm"
)
584
@_sortAscending(
false
)
585
@c
public
ComplexDate start;
//* start date
586
@_dateFormat(
"~MMM-dd, yyyy HH:mm"
)
587
@_cloneOf(
"end"
)
588
@c
public
ComplexDate finish;
//* finish
589
}
590
591
@DavClass._viewCols(
"longName, featuredEmployer, region, city, openJobs, openHouses, jobFairs"
)
592
@DavClass._skipAccessControl
593
public
static
class
Employer
extends
hudsonfog.voc.model.company.Company
{
594
@_subPropertyOf(
"name"
)
595
@k@s
public
String website;
596
@_displayNameElm
597
@s
public
String longName;
598
@_backLink(
"company"
)
599
public
Job[] openJobs;
600
@_readOnly
601
@_icon(
"icons/featured.gif"
)
602
@_colorCoding(
"'True' icons/featured.gif; 'False' icons/blank.gif"
)
603
public
Boolean featuredEmployer;
//* this employer is a sponsor of the site
604
@_backLink(
"party"
)
605
@h@s
public
PartyAddress[] addresses;
606
public
CompanyType companyType;
//* direct or third-party employer (staffing firm)
607
@_backLink(
"employer"
)
608
public
OpenHouse[] openHouses;
609
@_backLink(
"employer"
)
610
public
ParticipatingEmployer[] jobFairs;
611
public
Image logo;
612
}
613
614
public
static
enum ApplicationStatus {
615
Submitted, Received, Denied, @_label(
"Interview Scheduled"
) InterviewScheduled, @_label(
"Job Offered"
) JobOffered;
616
}
617
618
public
static
enum Industry {
619
@_label(
"Accounting/Finance"
) Accounting_Finance, @_label(
"Arts/Entertainment/Publishing"
) Arts_Entertainment_Publishing, @_label(
"Banking/Mortgage"
) Banking_Mortgage, @_label(
"Clerical/Administrative"
) Clerical_Administrative, College, @_label(
"Construction/Facilities"
) Construction_Facilities, @_label(
"Customer Service"
) CustomerService, @_label(
"Education/Training"
) Education_Training, @_label(
"Engineering/Architecture"
) Engineering_Architecture, @_label(
"Government/Military"
) Government_Military, Healthcare, @_label(
"Hospitality/Travel"
) Hospitality_Travel, @_label(
"Human Resources"
) HumanResources, Insurance, @_label(
"Internet/New Media"
) Internet_NewMedia, Technology, @_label(
"Law Enforcement/Security"
) LawEnforcement_Security, Legal, @_label(
"Management Consulting"
) ManagementConsulting, @_label(
"Manufacturing/Operations"
) Manufacturing_Operations, Marketing, @_label(
"Non-Profit/Volunteer"
) Non_Profit_Volunteer, @_label(
"Pharmaceutical/Biotech"
) Pharmaceutical_Biotech, @_label(
"Real Estate"
) RealEstate, @_label(
"Restaurant/Food Service"
) Restaurant_FoodService, Retail, Sales, Telecommunications, @_label(
"Transportation/Logistics"
) Transportation_Logistics, Advertising;
620
}
621
}
622